문제
이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저)
- N * M 행렬을 입력 받는다.
- 행렬상의 0은 음료얼음, 1은 플라스틱
- 0이 이어지면 한 덩어리로 취급한다.
- 음료얼음 덩어리는 총 몇 개인가?
# 입력 예시
4 5
00110
00011
11111
00000
# 출력 예시
3
풀이
DFS로 푸는게 적합해 보였다.
- 0과 1로 이루어진 행렬을 x,y 좌표로 하나씩 훑어나간다.
- 만일 x, y 좌표가 0보다 작거나 N,M보다 크다면 False 반환한다.
- 0을 만나면 1로 바꾼후, 상하좌우 DFS를 재귀시키고 True를 반환한다.
- 1을 만나면 바로 False를 반환한다.
- 가장 먼저 재귀를 동작시킨 곳에서 True를 반환 받으면, 얼음덩어리 1개를 찾은 것이다.
def dfs(juice, x, y, N, M):
if x < 0 or x >= N or y < 0 or y >= M:
return False
if juice[x][y] == 0:
juice[x][y] = 1
dfs(juice, x-1, y, N, M)
dfs(juice, x+1, y, N, M)
dfs(juice, x, y-1, N, M)
dfs(juice, x, y+1, N, M)
return True
return False
def solution():
ice = 0
N, M = map(int, input().split())
juice = []
for i in range(N):
juice.append(list(map(int, input())))
for x in range(N):
for y in range(M):
if dfs(juice, x, y, N, M): ice+= 1
print(ice)
solution()
프로그래머스에서 풀듯이 solution 함수로 묶어서 해봤다.
댓글남기기