728x90
난이도 : 실버1
풀이일 : 04237
https://www.acmicpc.net/problem/1697
링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐
풀이 코드
# 모든 좌표에 visited 배열 생성
# 순간이동 우선으로 BFS 탐색
# 시간초과 방지 queue 포인터 사용
# 만약, N==K라면 함수 실행 없이 0 출력
import sys
def BFS(n):
visited[n] = 1
queue = [n]
p = 0
while p < len(queue):
x = queue[p]
p += 1
dx = [x, -1, 1]
for k in range(3):
nx = x + dx[k]
if 0 <= nx < 100001 and not visited[nx]:
queue.append(nx)
visited[nx] = visited[x] + 1
if nx == K:
return print(visited[x])
N, K = map(int, sys.stdin.readline().split())
visited = [0] * 100001
if N == K:
print(0)
else:
BFS(N)
코드 구성
1. 가능한 모든 숫자를 포함하는 visited 배열 생성
2. 순간이동이 걷기보다 시간 소모 적음
-> 순간이동 우선으로 큐에 추가
3. queue 사용 시 시간초과 우려
-> 포인터를 사용해 pop 구현
4. 만약, 수빈이와 동생의 좌표가 같다면 0 출력, 아니라면 함수 실행
느낀점
동일한 로직의 골드 문제를 먼저 풀고 와서 그냥 세이브를 만들어 두는 느낌으로 기록
조금 더 어려운 문제를 풀고 싶다면 순간이동 시간 조건이 다른 숨바꼭질3을 추천
'알고리즘 > 🥈 실버' 카테고리의 다른 글
백준 1463 1로 만들기 파이썬 풀이 (0) | 2023.05.01 |
---|---|
백준 1991 트리 순회 파이썬 풀이 (0) | 2023.04.29 |
백준 11004 K번째 수 파이썬 풀이 (0) | 2023.04.18 |
백준 11724 연결 요소의 개수 파이썬 풀이, 시간초과, 반례 (0) | 2023.04.14 |
백준 5567 결혼식 파이썬 풀이 (0) | 2023.04.14 |