본문 바로가기
알고리즘['파이썬','JavaScript']/구름

구름톤 챌린지 2주 day7 학습 일기

by kk님 2023. 8. 22.

N행 N열의 격자판이 주어지고, 각 격자의 위치정보에 구름 유무가 0 또는 1로 표현된다.

간단하게 생각하면 지뢰찾기이고 이를 구름찾기로 변형한 귀여운 문제

 

1. 전체 판을 탐색해서, 0인 위치인지 확인하기

  - 그래야 구름이 아닌 칸(아무것도 존재하지 않거나, 깃발을 놓을 수 있는 칸)이기 때문인데

  - 만약 1인 위치도 포함한다면 주변에 구름이 K개인 경우가 있는 경우, 해당 칸도 k의 횟수로 포함되기 때문이다.

공교롭게도 이렇게 되는 경우

2. 이제 주변 8칸을 탐색하면 된다.

  - 내 경우는 탐색할 칸에 대해 미리 배열을 선언하고 반복문으로 해당 요소들을 꺼내왔다.

direction = [(-1,-1),(-1,0),(-1,1),(0,-1),(0,1),(1,-1),(1,0),(1,1)]

...
for dr,dc in direction:
...

 

여기까지 종합해서 설명하면,

먼저 kCount = 0으로 초기화를 한다. kCount는 탐색하는 칸의 주변 8칸 중 구름의 개수가 K인 칸의 개수를 의미한다.

board에서 0인 위치를 완전탐색한다.

board[row][col]의 값이 0인 위치라면, 임시변수를 설정한다. cloudCount = 0 

해당 위치에서 주변 8칸을 탐색한다.

주변 8칸을 탐색했을 때 구름이 있다면 해당 칸[row][col]에 대한 cloudCount 임시 변수를 1씩 증가한다.

주변 8칸 탐색을 완료했을 때(8칸을 탐색하는 for문을 빠져나왔을 때) cloudCount == K라면 kCount 를 1 증가시킨다.

 

위의 수도 코드를 차근차근 코드로 옮기면 결과를 확인할 수 있다.

 

처음에는, 막연하게 지뢰찾기라고 생각해서 어려울거라고 생각했는데 차근차근 진행하면서 요구사항을 만족하는 코드를 작성할 수 있었다.

옷입히기 성공!