15. 토마토(BFS : Breadth First Search) 질문
297
작성한 질문수 58
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다.
라고 해서 m, n 을 입력 받았는데 왜 틀린지 모르겠습니다.
강사님 풀이에서 n, m이라고 받으신 이유도 모르겠습니다....
아래 코드에서 제대로 array 받아오는 것 같은데 이유를 틀리는 이유를 모르겠습니다...!
강사님이 제공해주신 테스트 케이스는 다 통과하지만 백준에서는 틀리는 이유를 모르겠습니다...
6 4
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1
# 받아온 array
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 1]
8import sys
sys.setrecursionlimit(10 ** 6)
# sys.stdin=open("in5.txt", "r")
def valid_coord(x, y):
if 0 <= x < m and 0 <= y < n:
return True
else:
return False
def print_array(array):
for elem in array:
print(elem)
def bfs():
while queue:
# tmp_len = len(queue)
# for _ in range(tmp_len):
temp = queue.popleft()
temp_dis = dis[temp[0]][temp[1]]
for dx, dy in zip(dxs, dys):
nx = temp[0] + dx
ny = temp[1] + dy
# 익지 않은 상태이거나 유효한 좌표일 때
if valid_coord(nx, ny) and arr[nx][ny] == 0:
queue.append((nx, ny))
arr[nx][ny] = 1
dis[nx][ny] = temp_dis + 1
if __name__ == '__main__':
from collections import deque
n, m = map(int, input().split())
arr = []
for _ in range(m):
arr.append(list(map(int, input().split())))
dis = []
for _ in range(m):
dis.append([0] * n)
dxs = (-1, 1, 0, 0)
dys = (0, 0, -1, 1)
# print_array(arr)
# print('----')
# print_array(dis)
queue = deque()
for i in range(m):
for j in range(n):
if arr[i][j] == 1:
queue.append((i, j))
bfs()
# print_array(dis)
# arr에서 0을 발견하면 flag = False로 설정
flag = True
for i in range(m):
for j in range(n):
if arr[i][j] == 0:
flag = False
result = 0
if not flag:
print(-1)
else:
result = max(max(dis))
print(result)
답변 1
0
안녕하세요^^
문제을 설명대로 m, n으로 받아야 하는데 제가 착각하고 n, m으로 받고 가로 크기를 n으로 세로 크기를 m으로 해서 푼 것 같습니다. 이건 문제될 답이 안나오는 것과는 상관은 없습니다.
아래와 같이 코치니 통과됩니다.
import sys
def valid_coord(x, y):
if 0 <= x < m and 0 <= y < n:
return True
else:
return False
def bfs():
while queue:
# tmp_len = len(queue)
# for _ in range(tmp_len):
temp = queue.popleft()
temp_dis = dis[temp[0]][temp[1]]
for dx, dy in zip(dxs, dys):
nx = temp[0] + dx
ny = temp[1] + dy
# 익지 않은 상태이거나 유효한 좌표일 때
if valid_coord(nx, ny) and arr[nx][ny] == 0:
queue.append((nx, ny))
arr[nx][ny] = 1
dis[nx][ny] = temp_dis + 1
if __name__ == '__main__':
from collections import deque
n, m = map(int, input().split())
arr = []
for _ in range(m):
arr.append(list(map(int, input().split())))
dis = []
for _ in range(m):
dis.append([0] * n)
dxs = (-1, 1, 0, 0)
dys = (0, 0, -1, 1)
# print_array(arr)
# print('----')
# print_array(dis)
queue = deque()
for i in range(m):
for j in range(n):
if arr[i][j] == 1:
queue.append((i, j))
bfs()
# print_array(dis)
# arr에서 0을 발견하면 flag = False로 설정
flag = True
for i in range(m):
for j in range(n):
if arr[i][j] == 0:
flag = False
result = 0
if not flag:
print(-1)
else:
for i in range(m):
for j in range(n):
if dis[i][j]>result:
result=dis[i][j]
print(result)
기존에 윈도우 10으로 잘 써왔는데 윈도우 11로 바꾸고 나서 채점이 안됩니다.
1
78
2
스택에서 ')'을 만나는 경우
0
80
3
문제가 어디있나요?
0
67
2
변수 or 함수명
0
62
1
침몰하는 타이타닉 문제 질문입니다
0
59
1
AA.py 책점 에러
0
60
1
오늘 구매했는데 파이썬 자료구조 궁금한거 있으면 답변이 잘 될까요.
0
111
2
5.동전분배하기 문제 밑에코드도 정답이될까요?
0
110
1
아나그램 비교 코드
0
116
2
AA.PY파일 복사 후 채점 진행할때 오류 발생합니다.
0
161
2
문제 링크가있나여?
0
147
2
채점기 Time Limit Exceeded 오류 문의
1
166
2
동적계획법은 사용하는 문제
0
126
2
제 코드 좀 봐주세요
0
148
1
예외가 존재할 가능성?
0
97
1
3번이 안풀립니다
0
95
0
5번 틀림
0
115
0
오류원인?
0
99
0
리스트 선언
0
108
1
침몰하는 타이타닉(그리디) 문제 질문
0
111
1
알고리즘
0
70
1
코딩테스트
0
93
1
DFS 순서 질문드립니다.
0
129
2
left, right를 사용한 풀이법에 대한 질문입니다
0
91
1





