📖문제
N x M 크기의 얼음 틀이 있다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다. 구멍이 뚫려 있는 부분끼리 상, 하, 좌, 우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주한다. 이때 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하시오.
예시) 다음의 4 x 5 얼음 틀 예시에서는 아이스크림이 총 3개 생성된다.
입력 조건
- 첫 번째 줄에 얼음 틀의 세로 길이 N과 가로 길이 M이 주어진다.
(1 <= N, M <= 1,000)- 두 번째 줄부터 N + 1번째 줄까지 얼음 틀의 형태가 주어진다.
- 이때 구멍이 뚫려있는 부분은 0, 그렇지 않은 부분은 1이다.
출력 조건
- 한 번에 만들 수 있는 아이스크림의 개수를 출력한다.
Another answer
import sys
input= sys.stdin.readline
# N, M을 공백을 기준으로 구분하여 입력 받기
n, m = map(int, input().split())
# 2차원 리스트의 맵 정보 입력 받기
graph = []
for i in range(n):
graph.append(list(map(int, input())))
# DFS로 특정한 노드를 방문한 뒤에 연결된 모든 노드들도 방문
def dfs(x, y):
# 주어진 범위를 벗어나는 경우에는 즉시 종료
if x <= -1 or x >= n or y <= -1 or y >= m:
return False
# 현재 노드를 아직 방문하지 않았다면
if graph[x][y] == 0:
# 해당 노드 방문 처리
graph[x][y] = 1
# 상, 하, 좌, 우의 위치들도 모두 재귀적으로 호출
dfs(x - 1, y)
dfs(x, y - 1)
dfs(x + 1, y)
dfs(x, y + 1)
return True
return False
# 모든 노드(위치)에 대하여 음료수 채우기
result = 0
for i in range(n):
for j in range(m):
# 현재 위치에서 DFS 수행
if dfs(i, j) == True:
result += 1
print(result) # 정답 출력
dfs를 이용하여 푸는 문제로, 재귀를 이용한다. 우선 범위가 넘어가는 경우는 예외처리를 해주면서 방문하지 않은 칸에 도달하면 그 상하좌우 칸을 모두 재귀로 접근한다.
728x90
반응형
'코딩테스트 > 이것이취업을위한코딩테스트다[Python]' 카테고리의 다른 글
위에서 아래로-[이것이 취업을 위한 코딩 테스트다] (0) | 2023.09.05 |
---|---|
미로 탈출-[이것이 취업을 위한 코딩 테스트다] (0) | 2023.09.04 |
게임 개발-[이것이 취업을 위한 코딩 테스트다] (0) | 2023.09.04 |
왕실의 나이트-[이것이 취업을 위한 코딩 테스트다] (0) | 2023.09.04 |
1이 될 때까지-[이것이 취업을 위한 코딩 테스트다] (0) | 2023.09.04 |