반응형
import sys
sys.setrecursionlimit(10000)
input = sys.stdin.readline
def dfs(x, y):
# 주어진 좌표가 배추밭의 범위를 벗어나면 종료
if x < 0 or x >= N or y < 0 or y >= M:
return False
# 현재 좌표에 배추가 없으면 종료
if field[x][y] == 0:
return False
# 현재 좌표에 이미 방문한 경우 종료
if visited[x][y]:
return False
# 현재 좌표 방문 표시
visited[x][y] = True
# 상하좌우 방향으로 DFS 호출
dfs(x - 1, y)
dfs(x + 1, y)
dfs(x, y - 1)
dfs(x, y + 1)
return True
T = int(input()) # 테스트 케이스의 개수
for _ in range(T):
M, N, K = map(int, input().split()) # 가로, 세로, 배추의 개수
field = [[0] * M for _ in range(N)] # 배추밭 초기화
visited = [[False] * M for _ in range(N)] # 방문 여부 초기화
count = 0 # 배추흰지렁이의 수
# 배추 위치 입력
for _ in range(K):
Y, X = map(int, input().split()) # x, y 좌표 순서 변경
field[X][Y] = 1
# 모든 좌표에 대해 DFS 호출하여 배추 그룹 수 계산
for i in range(N):
for j in range(M):
if dfs(i, j): # x, y 좌표 순서 변경
count += 1
print(count)
https://fuzzysound.github.io/sys-setrecursionlimit
[파이썬 코딩테스트 팁] sys.setrecursionlimit
import sys sys.setrecursionlimit(10 ** 6) 만약 재귀를 사용해서 풀어야 하는 문제라면, 위 코드를 상단에 쓰는 것은 선택이 아닌 필수이다. 파이썬의 기본 재귀 깊이 제한은 1000으로 매우 얕은 편이다. 따
fuzzysound.github.io
import sys
sys.setrecursionlimit(10 ** 6)
만약 재귀를 사용해서 풀어야 하는 문제라면, 위 코드를 상단에 쓰는 것은 선택이 아닌 필수이다. 파이썬의 기본 재귀 깊이 제한은 1000으로 매우 얕은 편이다. 따라서 재귀로 문제를 풀 경우 드물지 않게 이 제한에 걸리게 되는데, 문제는 코딩테스트 환경에서는 에러 메시지를 볼 수 없다는 것이다. 이 함정에 걸린 사람은 원인 미상의 런타임 에러를 붙잡고 몇십 분을 각종 테스트케이스를 넣어가며 씨름하겠지만, 그런다고 문제가 잡힐 리 없다. 결국에는 문제를 풀지 못한 채 제출하게 되고 내가 뭘 잘못했지 하는 끝없는 자괴감에 빠지게 되는 것이다.
실제로 올해 여러 번 코딩테스트에 응시하면서 위 코드 없이는 풀 수 없는 문제들을 꽤 많이 봤다. 그중에는 카카오 인턴 코딩테스트 문제도 있었다. 억을하게 문제를 틀리고 싶지 않다면 위 코드를 반드시 숙지해놓아야 할 것이다.
반응형
'Beakjun_Solve > BFS, DFS' 카테고리의 다른 글
#백준, [#1926_그림], #BFS, #DFS (0) | 2024.08.07 |
---|---|
#11724_연결 요소의 개수 #DFS #파이썬 (0) | 2024.03.02 |
#1697_숨바꼭질 #백준 #파이썬 #BFS (1) | 2024.02.29 |
#7569번 토마토 #백준 #BFS #삼차원 배열 (0) | 2024.02.19 |
#BFS #21736 #백준 #파이썬 #헌내기는 친구가 필요해 (1) | 2024.02.18 |