[๋ฐฑ์ค€/python] 12851๋ฒˆ : ์ˆจ๋ฐ”๊ผญ์งˆ 2

2021. 8. 25. 16:05

๋ฌธ์ œ

์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  N(0 โ‰ค N โ‰ค 100,000)์— ์žˆ๊ณ , ๋™์ƒ์€ ์  K(0 โ‰ค K โ‰ค 100,000)์— ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๊ฑท๊ฑฐ๋‚˜ ์ˆœ๊ฐ„์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ, ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๊ฐ€ X์ผ ๋•Œ ๊ฑท๋Š”๋‹ค๋ฉด 1์ดˆ ํ›„์— X-1 ๋˜๋Š” X+1๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์ˆœ๊ฐ„์ด๋™์„ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” 1์ดˆ ํ›„์— 2*X์˜ ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

์ˆ˜๋นˆ์ด์™€ ๋™์ƒ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ˆ˜๋นˆ์ด๊ฐ€ ๋™์ƒ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์ด ๋ช‡ ์ดˆ ํ›„์ธ์ง€ ๊ทธ๋ฆฌ๊ณ , ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์œผ๋กœ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด ๋ช‡ ๊ฐ€์ง€ ์ธ์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ์ˆ˜๋นˆ์ด๊ฐ€ ์žˆ๋Š” ์œ„์น˜ N๊ณผ ๋™์ƒ์ด ์žˆ๋Š” ์œ„์น˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. N๊ณผ K๋Š” ์ •์ˆ˜์ด๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜๋นˆ์ด๊ฐ€ ๋™์ƒ์„ ์ฐพ๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋‘˜์งธ ์ค„์—๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์œผ๋กœ ์ˆ˜๋นˆ์ด๊ฐ€ ๋™์ƒ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ •๋‹ต

import sys
input = sys.stdin.readline

N, K = map(int, input().split())

if K == N:      # ๋‘˜์ด ๊ฐ™์€ ์œ„์น˜์— ์žˆ์„ ๋•Œ
    print(0)
    print(1)
elif K < N :    # ๋™์ƒ์ด ๋’ค์— ์žˆ์„ ๋•Œ
    print(N-K)
    print(1)

else:
    visited = [0 for _ in range(100001)]
    queue = [N]
    time = 0

    while queue:
        time += 1
        next_queue = []
        for n in queue:
            if (n >= 0 and n <= 100000) and (visited[n] == 0 or visited[n] == time):
                next_queue.extend([n*2, n-1, n+1])
                visited[n] = time

        if next_queue.count(K) > 0:
            print(time) 
            print(next_queue.count(K))
            break
        
        queue = next_queue

  • visited : visited์— ๊ฐ€๋Šฅํ•œ ์œ„์น˜์˜ ๋ชจ๋“  ์ˆซ์ž๋ฅผ 0์œผ๋กœ ์…‹ํŒ…ํ•œ๋‹ค.
  • queue : queue์—๋Š” ๊ฐ™์€ ๋ ˆ๋ฒจ์— ์žˆ๋Š” ์ˆซ์ž๋“ค์ด ๋“ค์–ด๊ฐˆ ์˜ˆ์ •์ด๊ณ  ๋ ˆ๋ฒจ์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค queue์˜ ๊ฐ’๋„ ๋ฐ”๋€๋‹ค.
  • time : bfs ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์— time์€ ์‹œ๊ฐ„ ์ฆ‰, ๋ ˆ๋ฒจ์„ ์˜๋ฏธํ•œ๋‹ค.
  • next_queue : next_queue๋Š” ๋‹ค์Œ ๋ ˆ๋ฒจ์˜ ์ˆซ์ž๋“ค์ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ฐ€ ํ˜„์žฌ ๋ ˆ๋ฒจ์˜ ์ˆซ์ž๋“ค์„ ๋‹ค ํƒ์ƒ‰ํ•œ ํ›„์— queue์— ์ €์žฅ๋œ๋‹ค.

queue์— ์žˆ๋Š” ๋ชจ๋“  ์ˆซ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ๋Œ๋ฉด์„œ

์œ„์น˜์˜ ๋ฒ”์œ„ ์•ˆ์— ํ•ด๋‹นํ•˜๋ฉด์„œ, ํ•œ๋ฒˆ๋„ ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๊ฑฐ๋‚˜ ํ˜„์žฌ ๋ ˆ๋ฒจ์—์„œ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด

next_queue์— ํ˜„์žฌ ์œ„์น˜์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์˜ ์ˆซ์ž๋“ค์„ ์ถ”๊ฐ€ํ•˜๊ณ 

ํ˜„์žฌ ๋ ˆ๋ฒจ์—์„œ ๋ฐฉ๋ฌธํ–ˆ์Œ์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด visited[n]์— ํ˜„์žฌ ๋ ˆ๋ฒจ time์„ ์ €์žฅํ•œ๋‹ค.

 

queue๋ฅผ ๋‹ค ๋ˆ ํ›„ next_queue์— ๋‚ด๊ฐ€ ๊ฐ€์•ผํ•  K๊ฐ€ 1๊ฐœ ์ด์ƒ ์žˆ๋‹ค๋ฉด

time๊ณผ next_queue์— ์žˆ๋Š” K์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ๋ฉˆ์ถ˜๋‹ค.

BELATED ARTICLES

more