λšœλΆ€λ‹ˆμ˜ Devlog

[BOJ] 13549.μˆ¨λ°”κΌ­μ§ˆ 3 (Python)

by λšœλΆ€λ‹ˆ

 

 

13549번: μˆ¨λ°”κΌ­μ§ˆ 3

μˆ˜λΉˆμ΄λŠ” 동생과 μˆ¨λ°”κΌ­μ§ˆμ„ ν•˜κ³  μžˆλ‹€. μˆ˜λΉˆμ΄λŠ” ν˜„μž¬ 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 μžˆλ‹€. μˆ˜λΉˆμ΄λŠ” κ±·κ±°λ‚˜ μˆœκ°„μ΄λ™μ„ ν•  수 μžˆλ‹€. λ§Œμ•½, 수빈이의 μœ„μΉ˜κ°€ X일

www.acmicpc.net

이 λ¬Έμ œλŠ” μˆ˜λΉˆμ΄κ°€ 동생을 찾을 수 μžˆλŠ” κ°€μž₯ λΉ λ₯Έ μ‹œκ°„μ΄ λͺ‡ μ΄ˆμΈμ§€ κ΅¬ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

수빈이의 μ‹œμž‘ μœ„μΉ˜λŠ” N, 동생 μœ„μΉ˜λŠ” K, μˆ˜λΉˆμ΄κ°€ μ΄λ™ν•œ μœ„μΉ˜λŠ” X둜 μ£Όμ–΄μ§‘λ‹ˆλ‹€.

μˆ˜λΉˆμ΄κ°€ κ±·λŠ”λ‹€λ©΄ 1초 ν›„ X-1 λ˜λŠ” X+1의 μœ„μΉ˜λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

μˆ˜λΉˆμ΄κ°€ μˆœκ°„μ΄λ™ν•œλ‹€λ©΄ 0초 ν›„ X*2의 μœ„μΉ˜λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

 

μˆ˜λΉˆμ΄μ™€ 동생이 μ‘΄μž¬ν•  수 μžˆλŠ” μ΅œλŒ€ μœ„μΉ˜λŠ” 100000μ΄λ―€λ‘œ 그것에 1을 더해 limit둜 μ§€μ •ν•©λ‹ˆλ‹€.

이 limitλŠ” 수빈이의 λ‹€μŒ 이동 μœ„μΉ˜λ₯Ό μ œν•œν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

수빈이의 μ΄λ™μ‹œκ°„μ„ κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ time 리슀트λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

이 λ•Œ, λ°©λ¬Έν•˜μ§€ μ•Šμ€ X점에 λŒ€ν•΄ ν™•μΈν•˜κΈ° μœ„ν•΄ -1둜 μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.

λ™μƒμ˜ μœ„μΉ˜λ‘œ 갈 λ•Œ μˆœκ°„μ΄λ™μ΄ κ°€μž₯ κ°€κΉŒμ΄ λ‹€κ°€κ°ˆ 수 μžˆμœΌλ―€λ‘œ λ¨Όμ € μˆ˜ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

κ·ΈλŸ¬λ―€λ‘œ deque의 맨 처음 μœ„μΉ˜λ‘œ λ„£μ–΄μ£Όλ©° μ§„ν–‰ν•˜λ„λ‘ μ‘°μ •ν•©λ‹ˆλ‹€.

 

이와 같은 λ°©μ‹μœΌλ‘œ 문제λ₯Ό ν’€λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

# μˆ¨λ°”κΌ­μ§ˆ 3
from collections import deque

def solution(N, K) :
    limit = 100001 # μ΅œλŒ€λ‘œ μ£Όμ–΄μ§€λŠ” 점 + 1
    time = [-1] * limit # μ‹œκ°„ μ €μž₯을 μœ„ν•œ 리슀트
    time[N] = 0
    d = [2, -1, 1]

    q = deque()
    q.append(N)

    while q :
        X = q.popleft()
        if X == K :
            return time[X]
        for i in range(3) :
            if i == 0 : # μˆ˜λΉˆμ΄κ°€ μˆœκ°„μ΄λ™ν•˜λŠ” 경우
                nx = X * d[i]
                if 0 < nx < limit and time[nx] == -1:
                    time[nx] = time[X]
                    q.appendleft(nx)
            else : # μˆ˜λΉˆμ΄κ°€ κ±·λŠ” 경우
                nx = X + d[i]
                if 0 <= nx < limit and time[nx] == -1 :
                    time[nx] = time[X] + 1
                    q.append(nx)

if __name__=="__main__" :
    N, K = map(int, input().split()) # 수빈이 μœ„μΉ˜, 동생 μœ„μΉ˜
    print(solution(N, K))

'Algorithm > BOJ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ] 14890.κ²½μ‚¬λ‘œ (Python)  (0) 2021.04.20
[BOJ] 1929.μ†Œμˆ˜κ΅¬ν•˜κΈ° (Python)  (0) 2021.04.19
[BOJ] 12110.2048(Easy)  (0) 2021.04.19
[BOJ] 1918.ν›„μœ„ν‘œκΈ°μ‹ (Python)  (0) 2021.04.17
[BOJ] 1105.νŒ” (Python)  (0) 2021.04.16

λΈ”λ‘œκ·Έμ˜ 정보

λšœλΆ€λ‹ˆμ˜ Devlog

λšœλΆ€λ‹ˆ

ν™œλ™ν•˜κΈ°