반응형
https://www.acmicpc.net/problem/1012
처음에 선언을 해줄 때,
빈값인 값으로 리스트를 초기화하기 위해서는 아래와 같이 해주어야 한다.
for 문을 꼭 사용해서,,
cabbage = [[0] * m for _ in range(n) ]
나는 새로운 도전을 하고자 새로운 방식으로 해줬는데
cabbage = [[0] * m]*n
어,, 한 열을 다 똑같다고 생각해서 바꾸기 때문에 조심해야 한다.
조심해야 할 점은, 행은 y축, 열은 x 축이라는 점이다.
그래서 처음에 배열을 초기화해줄 때, 보통 array [x][y]를 생각해주는데,
array [y] [x] 축으로 생각해서 해주어야 한다.
아래의 코드를 제출하면 로컬에서는 잘 작동하지만,
백준에서 진행할 시에는 재귀 에러가 난다.
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
def dfs(cabbage, m_x, m_y):
if m_x < 0 or m_x >= len(cabbage[0]) or m_y < 0 or m_y >= len(cabbage):
return 0
if cabbage[m_y][m_x] == 1:
cabbage[m_y][m_x] = 0
for i in range(4):
nx = m_x + dx[i]
ny = m_y + dy[i]
dfs(cabbage, nx, ny)
return 1
return 0
num = int(input())
while(num):
num -= 1
# input
m, n, k = map(int, input().split())
cabbage = [[0] * m for _ in range(n) ]
# O(k) * num
for _ in range(k):
x, y = map(int, input().split())
cabbage[y][x] = 1
count = 0
# process
for i in range(m):
for j in range(n):
count += dfs(cabbage, i, j)
print(count)
해당 문제를 백준 사이트에서 찾아보니
상단에 아래의 코드를 추가하면 된다고 한다.
import sys
sys.setrecursionlimit(10**6)
끝!
반응형