구름LEVEL
난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.
level.goorm.io
문제 해결 방법
각 깃발칸에 대해서, 그 칸에 들어갈 숫자가 k 인지를 알기 위해서는 직접 그 주변의 칸들을 탐색해보는 수밖에 없다. 모든 칸을 돌면서 그 주변 8칸에 구름이 몇 개 있는지를 확인하고, 그 결과가 k와 같은지를 확인하면 되는 간단한 문제이다.
주의할 사항들은 다음과 같다.
- 리스트의 숫자를 업데이트 하면 안 된다. (주변 구름이 1개여서 그 깃발칸이 1로 업데이트 되었다면, 다른 깃발칸의 입장에서, 1이 된 깃발칸을 구름으로 착각하게 된다. 만약 모든 칸의 결과를 업데이트하는 방식을 원한다면, 구름칸을 -1로 바꾸는 등의 방식이 필요하다.)
- 구름칸은 탐색에서 스킵해야한다.
위 두가지 사항을 제외하면 어렵지 않게 문제를 해결할 수 있을 것이다.
위 내용을 코드로 구현하면 아래와 같다.
import sys
n, k = map(int, sys.stdin.readline().split())
arr = [list(map(int, sys.stdin.readline().split())) for i in range(n)]
# 주변을 확인해서 현재 위치의 깃발 숫자를 반환하는 함수
def get_flag_number(i, j):
global n, arr
#8방향을 모두 확인해야함
dx = [-1, -1, -1, 0, 0, 1, 1, 1]
dy = [1, 0, -1, 1, -1, 1, 0, -1]
cloud_count = 0
for k in range(8):
if 0 <= j+dx[k] < n:
if 0 <= i+dy[k] < n:
if arr[i+dy[k]][j+dx[k]] == 1:
cloud_count += 1
return cloud_count
k_flag_count = 0
for i in range(n):
for j in range(n):
#구름인 곳은 깃발을 놓을 수 없다.
if not arr[i][j] == 1:
if get_flag_number(i, j) == k:
k_flag_count += 1
print(k_flag_count)
'알고리즘 > 9oormthon Challenge' 카테고리의 다른 글
[구름톤 챌린지 #9] 폭탄 구현하기 (2) (0) | 2023.08.24 |
---|---|
[구름톤 챌린지 #8] 통증 (0) | 2023.08.23 |
[구름톤 챌린지 #6] 문자열 나누기 (0) | 2023.08.21 |
[구름톤 챌린지 #5] 이진수 정렬 (0) | 2023.08.18 |
[구름톤 챌린지 #4] 완벽한 햄버거 만들기 (0) | 2023.08.18 |