-문제: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

+ Recent posts