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 증가시킨다.
위의 수도 코드를 차근차근 코드로 옮기면 결과를 확인할 수 있다.
처음에는, 막연하게 지뢰찾기라고 생각해서 어려울거라고 생각했는데 차근차근 진행하면서 요구사항을 만족하는 코드를 작성할 수 있었다.
옷입히기 성공!
'알고리즘['파이썬','JavaScript'] > 구름' 카테고리의 다른 글
구름톤 챌린지 2주 day9 학습 일기 (0) | 2023.08.24 |
---|---|
구름톤 챌린지 2주 day8 학습 일기 (0) | 2023.08.23 |
구름톤 챌린지 2주 day6 학습 일기 (0) | 2023.08.21 |
구름톤 챌린지 1주 day5 학습 일기 (1) | 2023.08.19 |
구름톤 챌린지 1주 day4 학습 일기 (0) | 2023.08.17 |