Baekjoon/DFS와 BFS

[백준] 1012 유기농 배추 (실버2) / BFS (방문체크 위치 정확히!)

2023. 4. 21. 14:28

문제요약

나의 코드 및 설명

  • 너비우선탐색(BFS)을 통해 연속된 배추가 심어진 좌표를 모두 0으로 바꾼다.
  • 메인 함수 부분의 for문을 통해 배추가 심어진 좌표(1)일 경우 bfs 함수가 호출되게 되고 배추가 심어진 좌표의 값(1)을 0으로 바꿔주고 ans에 1을 더한다.
from collections import deque

def bfs(sx,sy):
    queue = deque()
    queue.append((sx,sy))

    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:
                    board[ny][nx] = 0 #배추가 심어진 좌표(1)를 방문하면 (0)으로 바꾼다.
                    visited[ny][nx] = 1
                    queue.append((nx,ny))

t = int(input())
for test_case in range(1, t+1):
    m, n, k = map(int, input().split()) #m:가로 / n:세로 / k:배추 심겨진 위치 개수
    board = [[0]*m for _ in range(n)]

    for _ in range(k):
        x,y = map(int, input().split())
        board[y][x] = 1

    visited = [[0]*m for _ in range(n)]
    dx = [0,1,0,-1]
    dy = [1,0,-1,0]

    ans = 0

    for i in range(n):
        for j in range(m):
            if board[i][j] == 1: 
                bfs(j,i) #이어진 배추가 심어진 좌표를 모두 0으로 바꾸게 된다.
                ans += 1 
    
    print(ans)

피드백

BFS는 큐에서 뺀 다음이 아닌, 큐에 넣을 때 방문 체크를 해야 중복 방문이 일어나지 않는다. 시간 초과가 발생하면 이 점을 지켰는지 의심해봐야 한다고 한다.

BFS는 큐에 넣을 때 방문 체크를 해야 함!!
큐에서 뺀 다음 방문 체크를 하면 중복 방문으로 처리 되어 시간초과 발생!

 

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

[백준] 2583 영역 구하기 (실버1) / BFS  (0) 2023.04.23
[백준] 1697 숨바꼭질 (실버1) / BFS  (0) 2023.04.21
[백준] 1926 그림 (실버1) / BFS, 런타임에러(ValueError) 해결  (0) 2023.04.19
[백준] 2667 단지번호붙이기 (실버1) / DFS  (0) 2023.04.17
[백준] 2178 미로 탐색 (실버1) / BFS  (0) 2023.04.17
'Baekjoon/DFS와 BFS' 카테고리의 다른 글
  • [백준] 2583 영역 구하기 (실버1) / BFS
  • [백준] 1697 숨바꼭질 (실버1) / BFS
  • [백준] 1926 그림 (실버1) / BFS, 런타임에러(ValueError) 해결
  • [백준] 2667 단지번호붙이기 (실버1) / DFS
hellosonic
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)

블로그 메뉴

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

공지사항

인기 글

태그

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

최근 댓글

최근 글

hELLO · Designed By 정상우.
hellosonic
[백준] 1012 유기농 배추 (실버2) / BFS (방문체크 위치 정확히!)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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