Baekjoon/DFS와 BFS

[백준] 1926 그림 (실버1) / BFS, 런타임에러(ValueError) 해결

2023. 4. 19. 13:32

문제요약

나의 코드 및 설명

  • DFS로는 런타임 에러가 발생하여 BFS로 풀었다.
from collections import deque

def bfs(x,y):
    global size
    queue = deque()
    queue.append((x,y))
    size = 1
    visited[y][x] = 1 #현재 좌표 방문처리
    board[y][x] = 0 #방문한 현재 좌표에 0 저장

    while queue:
        x,y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if nx<0 or ny<0 or nx>=m or ny>=n:
                continue
            else:
                if board[ny][nx] == 1 and visited[ny][nx] == 0:
                    visited[ny][nx] = 1
                    board[ny][nx] = 0
                    size += 1
                    queue.append((nx,ny))
                    

n, m = map(int, input().split()) #세로n 가로m

board = []
for _ in range(n):
    board.append(list(map(int, input().split())))

dx = [0,1,0,-1]
dy = [1,0,-1,0]
visited = [[0] * m for _ in range(n)]
size = 0
max_size = 0
count = 0
for i in range(n):
    for j in range(m):
        if board[i][j] == 1:
            bfs(j, i)
            if max_size < size:
                max_size = size
            
            size = 0
            count += 1

print(count,max_size,sep="\n")

 

피드백

좌(런타임에러) - 리스트에 bfs 실행 후 리턴값을 저장 / 우(패스) - bfs 실행 후 변수에 저장

처음엔 나에게 더 익숙한 DFS로 풀어보려고 했으나 예제입력에 대한 출력값은 정상적으로 나왔지만 런타임 에러가 발생했다. 이럴 경우 BFS로 풀면 된다는 것을 몸소 체험할 수 있었다. DFS, BFS의 시간 복잡도는 모든 노드를 탐색한다는 점에서 동일하지만 BFS가 재귀함수로 구현하는 DFS보다 조금 더 빠르다고 한다.

BFS로 다시 도전해서 맞을 수 있었는데 며칠 뒤 다시 풀어보려고 하니까 런타임 에러가 발생했다. 맞는 것 같은데 왜 에러가 발생하지.. 고민하다가 결국 원인을 찾아냈는데, BFS를 실행한 후의 값을 리스트에 저장해서 사용하려고 하니까 런타임 에러(ValueError)가 발생했다..(머지...) 변수에 저장하니까 정답 판정을 받을 수 있었따.  >> 에러의 원인이 이게 아니었다. 문제를 보면 그림이 하나도 없는 경우에는 가장 넓은 그림의 넓이는 0 이라고 하였다. 즉, 그림이 하나도 없는 경우에는 ans_list = []이게 되고, 빈 리스트에서 max 메서드를 사용하다 보니 런타임 에러(ValueError)가 발생하는 것이다. ans_list가 비어있는 경우(그림이 하나도 없는 경우) 0이 출력될 수 있도록 조건문을 작성하여 제출해보았더니 정답 판정을 받을 수 있었다.

'Baekjoon > DFS와 BFS' 카테고리의 다른 글

[백준] 1697 숨바꼭질 (실버1) / BFS  (0) 2023.04.21
[백준] 1012 유기농 배추 (실버2) / BFS (방문체크 위치 정확히!)  (0) 2023.04.21
[백준] 2667 단지번호붙이기 (실버1) / DFS  (0) 2023.04.17
[백준] 2178 미로 탐색 (실버1) / BFS  (0) 2023.04.17
[백준] 1260 DFS와 BFS (실버2)  (0) 2023.04.17
'Baekjoon/DFS와 BFS' 카테고리의 다른 글
  • [백준] 1697 숨바꼭질 (실버1) / BFS
  • [백준] 1012 유기농 배추 (실버2) / BFS (방문체크 위치 정확히!)
  • [백준] 2667 단지번호붙이기 (실버1) / DFS
  • [백준] 2178 미로 탐색 (실버1) / BFS
hellosonic
hellosonic
hellosonic
꾸준함
hellosonic
전체
오늘
어제
  • 분류 전체보기 (285)
    • SSAFY (4)
    • 프로그래머스 데브코스 (26)
    • Diary (1)
    • JavaScript (20)
    • ToyPJ (13)
      • Python-Django (13)
    • CS지식 (11)
      • 자료구조 (5)
      • 개발 상식 (2)
      • 네트워크 (4)
    • Baekjoon (141)
      • IM Level (57)
      • DFS와 BFS (21)
      • 백트래킹 (21)
      • DP (3)
      • 이분탐색 (4)
      • 구현 (14)
    • Programmers (13)
      • Lv1 (4)
      • Lv2 (9)
    • SWEA (SW Expert Academy) (52)
      • D1 (5)
      • D2 (7)
      • D3 (40)
    • 이코테 (4)
    • Grammar (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리자

공지사항

인기 글

태그

  • 리액트 todolist
  • 프로그래머스 데브코스
  • 구현
  • SWEA D2
  • 국비지원교육
  • 파이썬 1269
  • 자바스크립트 기본기
  • 프론트엔드 데브코스
  • SWEA
  • JS
  • 파이썬 1946
  • 그리디
  • 백준
  • 파이썬 1436
  • 프로그래머스
  • 파이썬 2529
  • javascript ux
  • 코딩부트캠프
  • SWEA/D3
  • 백준 1157
  • 파이썬 11478
  • 백준 14891
  • 백준 2999
  • 자바스크립트
  • 이코테
  • 파이썬
  • SWEA 파이썬
  • 백준 5212
  • 백준 18870
  • SWEA D3

최근 댓글

최근 글

hELLO · Designed By 정상우.
hellosonic
[백준] 1926 그림 (실버1) / BFS, 런타임에러(ValueError) 해결
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.