-문제:https://www.acmicpc.net/problem/1926
1926번: 그림
어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로
www.acmicpc.net
29번 라인 빼고 나머지는 스스로 작성한 코드이다.
풀면서 계속 valueError를 마주쳤는데, 해당 에러를 발생한 코드를 기록하려고 한다
-정답풀이:
풀이는 다른 bfs문제들과 비슷했던 것 같다
방문하지 않고, 값이 1인 것들을 기준으로 bfs를 실행하고, 실행하면서 해당 그림의 크기를 잴 수 있게 cnt라는 변수를 계산하고 반환했다.
실수한 부분(실수한 부분을 인지해서 같은 것을 반복하게 하지 않기 위함):
1)처음에 cnt=0으로 선언했어서 틀렸다.
그런데 bfs가 시작 되었을 때는 1이 하나 있으므로 cnt=1로 시작해야한다
2) 오타부분 graph를 grpah로 작성하거나,
graph[i][j]라고 입력해야하는 것을 graph[nx][ny]라고 입력했다
from collections import deque
dx=[-1,1,0,0]
dy=[0,0,-1,1]
def bfs(a,b):
q=deque()
q.append([a,b])
visit[a][b]=1
cnt=1
while q:
x,y=q.popleft()
for i in range(4):
nx,ny=x+dx[i],y+dy[i]
if 0<=nx<n and 0<=ny<m:
if (not visit[nx][ny]) and graph[nx][ny]==1:
cnt+=1
visit[nx][ny]=1
q.append([nx,ny])
return cnt
n,m=map(int,input().split())
visit=[[0]*m for _ in range(n)]
graph=[]
for _ in range(n):
graph.append(list(map(int,input().split())))
ans=0
result=0
for i in range(n):
for j in range(m):
if visit[i][j]==0 and graph[i][j]==1:
result=max(bfs(i,j),result)
ans+=1
print(ans)
print(result)
-틀린풀이:
반환되는 값들이 정수라고 생각해 그들을 리스트에 삽입한 후 그 중에서 가장 큰 값을 출력하는 것을 생각했는데 계속해서 ValueError가 발생했다. 이 외의 코드는 정답풀이와 동일하다
(2022.08.02)
result에 아무 원소도 없을 때 max([])의 형태인데, 리스트는 들어왔지만, 안에서 최댓값을 찾을 수 있는 게 없어서 ValueError가 발생했다
'백준 > Search' 카테고리의 다른 글
[백준/bfs] 1325번: 효율적인 해킹(다시) (0) | 2022.03.02 |
---|---|
[백준/bfs] 2251번: 물통 (0) | 2022.03.02 |
[백준/bfs] 2638번: 치즈(다시) (0) | 2022.02.28 |
[백준/dfs] 1068번: 트리 (0) | 2022.02.28 |
[백준/dfs] 9466번: 텀 프로젝트 (0) | 2022.02.28 |