본문 바로가기
Problem Solving/BOJ

[BOJ][Python]13549 풀이

by NoiB 2023. 8. 1.
반응형

https://www.acmicpc.net/problem/13549

 

13549번: 숨바꼭질 3

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때

www.acmicpc.net

import heapq
import sys
ssr = sys.stdin.readline

INF = 100001

def dijkstra(n, k): # -1, 1, *2
    h = [(0, n)]
    time = [INF for _ in range(200001)]
    time[n] = 0
    while h:
        cur_time, cur_node = heapq.heappop(h)
        if cur_time > time[cur_node]:
            continue
        if 0 <= cur_node-1 and time[cur_node]+1 < time[cur_node-1]:
            time[cur_node-1] = time[cur_node]+1
            heapq.heappush(h, (time[cur_node]+1, cur_node-1))
        if cur_node+1 <= 100000 and time[cur_node]+1 < time[cur_node+1]:
            time[cur_node+1] = time[cur_node]+1
            heapq.heappush(h, (time[cur_node]+1, cur_node+1))
        if 2*cur_node <= 200001 and time[cur_node] < time[2*cur_node]:
            time[2*cur_node] = time[cur_node]
            heapq.heappush(h, (time[cur_node], 2*cur_node))
    print(time[k])
        
n, k = map(int, ssr().split())
dijkstra(n, k)

예전에 리모컨 문제라고 비슷한 문제를 풀었던 적이 있습니다. 이 문제랑은 약간 다르지만 이 문제에서 간과할 수 있는 부분을 똑같이 함정으로 깔아놨던 문제였어요. 궁금하신 분은 제 블로그의 링크를 올려드릴테니 한 번 보셔도 좋을 것 같네요. https://justduke.tistory.com/66

 

[BOJ][Python]1107번 풀이

https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이

justduke.tistory.com

그래서 이 문제에서 주의해야할 부분은 n이 k보다 클 수도 있다는 점과 k보다 큰 값의 위치로 이동해서 -1씩 해서 내려가는게 더 빠른 경우도 있다는 부분이 되겠네요. 예를들어 n = 6000이고 k = 10000이면 처음위치에서 곱하기 2를 한 다음에 2000번 내려가는게 4000번 올라가는 거 보다 빠르겠죠. 그 부분에 유의해서 배열의 사이즈를 정하는 부분이나 조건문을 정하는 부분 등을 잘 체크해보시면 될 것 같습니다.

 

bfs로 푸시는 분들도 있을텐데 메모리 관리만 잘하시고 위에서 말씀드린 주의할 점만 신경쓰신다면 크게 어렵지 않을 것 같습니다.

 

데이크스트라의 개념이 좀 더 궁금하다면,

[Algorithm][Python]데이크스트라(Dijkstra) 최단 경로 알고리즘 + 코드

 

[Algorithm][Python]데이크스트라(Dijkstra) 최단 경로 알고리즘 + 코드

저를 가장 오랫동안 괴롭혔던 알고리즘 중에 하나인 데이크스트라 알고리즘에 대해서 정리를 해볼까합니다. 그 때의 헤매던 저와 비슷한 분들께 도움이 되면 좋겠네요. 데이크스트라(Dijkstra) 최

justduke.tistory.com

 

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]9370 풀이  (0) 2023.08.03
[BOJ][Python]1238 풀이  (0) 2023.08.02
[BOJ][Python]1504 풀이  (0) 2023.08.01
[BOJ][Python]1753 풀이  (0) 2023.08.01