728x90
반응형
- 오늘의 학습 키워드
#BFS#DFS#deque
- 문제
백준
1697번, 숨바꼭질
https://www.acmicpc.net/problem/1697
- 오늘의 회고
BFS, DFS 개념을 배우고 공부한지 여러 번인데 이제서야 이해가 되는 거 같다.
깊이 우선 탐색은 왜 깊이 우선 탐색인지 BFS는 언제 써야 효율적인지 느꼈다.
- 어떤 문제가 있었고, 나는 어떤 시도를 했는지
문제를 풀기 전에 BFS 뼈대 암기를 했다.
외운 코드에서는 queue.extend(graph[node])를 통해 리스트를 큐에 삽입했다. (graph도 dict형이었다)
하지만 실전 백준 문제에서는 튜플을 사용해야 하는데 extend로 하니깐 계속 에러가 났다. append로 바꿔야 했다.
튜플을 사용한 이유는 depth 를 추적하기 위해서였다.
import sys
from collections import deque
input_data = sys.stdin.readlines()
N,K = map(int,input_data[0].split())
def bfs(N,K):
visited = []
queue = deque([(N,0)])
while queue:
node, depth = queue.popleft()
if node == K:
return depth
if node in visited:
continue
visited.append(node)
if node + 1 <= 100000:
queue.append((node + 1, depth + 1))
if node - 1 >= 0:
queue.append((node - 1, depth + 1))
if node * 2 <= 100000:
queue.append((node * 2, depth + 1))
return -1
print(bfs(N,K))
- 무엇을 새롭게 알았는지
queue.extend 는 iterable의 요소를 개별적으로 추가한다 -> 리스트 확장, 튜플도 됨
queue.append 는 리스트에 단일 요소를 추가한다. 다음 예시를 보면 정확하게 알 수 있다.
[1, 2].append([3, 4]) → [1, 2, [3, 4]] |
[1, 2].extend([3, 4]) → [1, 2, 3, 4] |
728x90
반응형
'공부 > 알고리즘' 카테고리의 다른 글
99클럽 코테 스터디 1일차 TIL + 오늘의 학습 키워드 (0) | 2025.01.13 |
---|---|
[Solvesql - Advent of SQL 2024] 게임 개발사의 주력 플랫폼 찾기 (0) | 2025.01.04 |
[Solvesql - Advent of SQL 2024] 게임 평점 예측하기 1 (1) | 2025.01.01 |
[Solvesql - Advent of SQL 2024] 온라인 쇼핑몰의 월 별 매출액 집계 풀이 (0) | 2024.12.31 |
Brand-and-Bound 분기 한정법 (0) | 2020.07.01 |