https://www.softeer.ai/practice/info.do?idx=1&eid=409
Softeer
연습문제를 담을 Set을 선택해주세요. 취소 확인
www.softeer.ai
문제를 보자마자 백준문제(2667번 / 단지번호 붙이기) 에서 풀었던 문제가 떠올랐다.
동일한 문제여서 쉽게 해결할 수 있었다.
복기해야하는 점은
- 격자 벗어나는 부분(종료조건) 또는 0이면 False 리턴
- 방문을 했으면 방문표시 (1 -> 0)으로 표시하여 탐색한곳 다시 탐색하지 않도록 방지
- 문제 조건에 맞게 정렬을 한다.
<내 코드>
import sys
def dfs(S, x, y):
global cnt
if x <= -1 or x >= N or y <= -1 or y >= N:
return False
if S[x][y] == '1':
cnt += 1
S[x][y] = '0'
dfs(S, x-1, y)
dfs(S, x, y-1)
dfs(S, x+1, y)
dfs(S, x, y+1)
return True
return False
S, visited = [], []
N = int(sys.stdin.readline())
for _ in range(N):
S.append(list(input()))
global cnt
result = 0 # total block
for i in range(N):
for j in range(N):
cnt = 0
if dfs(S, i, j) == True:
visited.append(cnt)
result += 1
visited.sort()
print(result)
for q in visited:
print(q)
'Algorithm > Softeer' 카테고리의 다른 글
[Softeer / Level2] [21년 재직자 대회 예선] 전광판 (0) | 2023.10.06 |
---|---|
[Softeer / Level2] [21년 재직자 대회 예선]비밀 메뉴 (1) | 2023.10.05 |
[Softeer / Level2] 지도 자동 구축 (1) | 2023.10.04 |
[Softeer / Level2] 8단 변속기 (1) | 2023.10.02 |
[Softeer / Level2] 금고털이 (0) | 2023.10.01 |