https://www.acmicpc.net/problem/1012
백준 유기농배추 문제 이다.
sys.setrecurtionlimie()을 써주지 않았을때는 에러가 발생했다. RecursionError인데,
재귀말고 반목문으로 작성해봐야겠다.
만약 시간이 없어서 반복문으로 작성하지 못하였을 경우엔 sys.setrecurtionlimie()에 백만정도로 값을 세팅해주면 문제없이 돌아간다.
# 0823 ~ 0858
# 백준 1012
import sys
from collections import deque
sys.setrecursionlimit(1000000)
input = sys.stdin.readline
def dfs(graph, x, y):
if x <= -1 or x>= N or y<= -1 or y >= M:
return False
if graph[x][y] == 1:
graph[x][y] = 0
dfs(graph, x - 1, y) # 상
dfs(graph, x + 1, y) # 하
dfs(graph, x, y - 1) # 좌
dfs(graph, x, y + 1) # 우
return True
return False
T = int(input())
for _ in range(T):
M, N, K = map(int, input().split())
# M: 가로길이, N: 세로길이, K: 배추개수
# X Y
g = [[0] * M for _ in range(N)]
for _ in range(K):
i, j = map(int, input().split())
g[j][i] = 1
worm = 0
for i in range(N): # 세로 길이 -> x
for j in range(M): # 가로 길이 -> y
if dfs(g, i, j) == True:
worm += 1
print(worm)
RecurtionError에 대한 설명은 아래에 되어있다.
https://www.acmicpc.net/help/rte/RecursionError
하지만 만약 sys.setrecurtionlimie으로도 에러가 난다면 Segmentation fault가 발생해 런타임 에러 이유로 SegFault를 받게되었다고 보는 것이 맞다. 즉 채점서버가 감당하지 못하는 것이다.
이 경우 너무 많은 재귀가 일어나는 것이다.
그러니 이게 불안하면 반복문으로 작성하는 게 낫다.
반응형
'Algorithm > 문제풀이' 카테고리의 다른 글
[BOJ] 백준 11060 점프점프 - 파이썬 (0) | 2022.03.25 |
---|---|
[BOJ] 백준 16173 점프왕 쨀리 - 파이썬 (0) | 2021.08.13 |
[BOJ] 백준 1058 친구 - 파이썬 (0) | 2021.08.13 |
[BOJ] 백준 9094 - 수학적 호기심 - Java (0) | 2021.07.18 |
[BOJ] 백준 5555 - 반지 - Java 풀이 (0) | 2021.07.12 |