250x250
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- 백준
- 스프링 컨테이너
- 스프링
- 어플리케이션 클래스 로더
- 객체지향
- 파이썬 리스트 메서드
- 심볼릭 레퍼런스
- stop the world
- python
- aws saa-c03
- Spring
- getreference
- 다이렉트 레퍼런스
- 플랫폼 클래스 로더
- BFS
- 부트스트랩 클래스 로더
- 코딩테스트
- 알고리즘
- 컴포넌트 스캔
- 파이썬 문자열 메서드
- python list method
- AWS SAA-C03 합격후기
- 클래스 로더 계층
- java
- 자바
- 2026 AWS SAA-C03
- 자료구조
- dfs
- 딕셔너리
- 파이썬
Archives
- Today
- Total
클라우드 낚시꾼
[백준] 13656 침투 - BFS (Python3) 본문
728x90


제한 조건과 설계

- 미로 문제처럼 M*N 격자 그래프 문제이므로 BFS를 사용한다.
- 1은 검은색 격자이기에 전류가 잘 통하지 않고, 0은 흰색 격자로 전류가 잘 통한다.
- 0행에서 M-1행에 도달하는 경로가 있는 지를 물어보는 문제다.
자연어 알고리즘
- 정보를 입력 받고 그래프를 생성한다.
- 0행에서 값이 0인 좌표가 시작 지점이다. 이 지점들을 starts 리스트에 저장한다.
- starts 중 한 지점으로 BFS 탐색을 시도 했을 때 m-1 행에 도달하면 YES를 출력하고 프로그램을 종료한다.
- starts의 모든 지점을 시작 지점으로 BFS를 반복한다.
- 3번에서 YES를 출력하고 종료되지 않았다면 NO를 출력하고 프로그램을 종료한다.
코드
import sys
from collections import deque
input = sys.stdin.readline
#행, 열
m,n = map(int,input().split())
graph = [list(map(int, input().rstrip())) for i in range(m)]
starts = [(0,i) for i in range(n) if graph[0][i] == 0]
def bfs(graph,v,m_max,n_max):
m,n = v
q = deque([(m,n)])
graph[m][n] = 1
dm,dn = [-1,1,0,0],[0,0,-1,1]
while q:
m,n = q.popleft()
for i in range(4):
nm, nn = m+dm[i], n+dn[i]
if nm == m_max:
print("YES")
exit()
if nm < 0 or nn < 0 or nn >= n_max or graph[nm][nn] == 1:
continue
q.append((nm,nn))
graph[nm][nn] = 1
m_max = len(graph)
n_max = len(graph[0])
[bfs(graph,v,m_max,n_max) for v in starts]
print("NO")
세 줄 요약
graph = [list(map(int, input().rstrip())) for i in range(m)]
- 격자 그래프를 생성할 때 실수했다. 한 행을 String으로 받고 map 함수로 각 String요소를 int로 형 변환해서 list에 하나씩 추가 한다음 그 list를 graph에 추가하는 과정을 반복하면 된다. 위는 격자 그래프 생성 코드이다.
- [bfs(graph,v,m_max,n_max) for v in starts] 처럼 List Comprension을 사용하면 2줄 쓸 코드를 1줄로 줄일 수 있다.
- dm,dn = [-1,1,0,0],[0,0,-1,1] 처럼 2줄 쓸 코드를 1줄로 줄일 수 있다.
728x90
'CodingTest > 문제풀이' 카테고리의 다른 글
| [백준] 24445번 알고리즘 수업-너비 우선 탐색 2 (BFS 시간 초과 해결) (2) | 2024.01.03 |
|---|---|
| [백준] 18352번 특정 거리의 도시 찾기 - BFS(Python3) (1) | 2023.12.29 |
| [백준] 2644번 촌수계산 - DFS (Python3) (0) | 2023.12.28 |
| [백준] 13023번 ABCDE - DFS 풀이 + 반례 (Python3) (0) | 2023.12.27 |
| [백준] 11724번 연결 요소의 개수 - DFS(stack, 재귀함수) (Python3) (0) | 2023.12.27 |