๐Ÿ“š Algorithm/๐Ÿ’ช๐Ÿป Python ๋ฌธ์ œ ํ’€์ด

[Python - ๋ฐฑ์ค€ 13913] ์ˆจ๋ฐ”๊ผญ์งˆ4

yunakim2 2021. 4. 15. 16:00
๋ฐ˜์‘ํ˜•
 

13913๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ 4

์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  N(0 ≤ N ≤ 100,000)์— ์žˆ๊ณ , ๋™์ƒ์€ ์  K(0 ≤ K ≤ 100,000)์— ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๊ฑท๊ฑฐ๋‚˜ ์ˆœ๊ฐ„์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ, ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๊ฐ€ X์ผ

www.acmicpc.net

๋ฌธ์ œ ์„ค๋ช…

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

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

์ž…๋ ฅํ˜•์‹

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

์ถœ๋ ฅํ˜•์‹

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

๋‘˜์งธ ์ค„์— ์–ด๋–ป๊ฒŒ ์ด๋™ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

ํ’€์ด ๊ณผ์ •

์ด์ „์— ํ’€์—ˆ๋˜ ์ˆจ๋ฐ”๊ผญ์งˆ ๋ฌธ์ œ์—์„œ path ๊ฒฝ๋กœ๋„ ์ถœ๋ ฅ์„ ๊ฐ™์ด ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

์ตœ์†Œ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ• ๋•Œ ์ด์ „ ๊ฐ’์—์„œ +1์„ ํ•ด์ค€ ๊ฒƒ์„ ์•„์ด๋””์–ด๋กœ visited_path ๋ผ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๊ฑฐ๊ธฐ๋‹ค๊ฐ€ ์ด์ „ ์ด๋™ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

๊ทธ๋‹ค์Œ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ํƒ€๊ณ ํƒ€๊ณ  ์ด์ „ ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ํ˜•์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

 

[Python - ๋ฐฑ์ค€ 1697] ์ˆจ๋ฐ”๊ผญ์งˆ

1697๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ ์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  N(0 ≤ N ≤ 100,000)์— ์žˆ๊ณ , ๋™์ƒ์€ ์  K(0 ≤ K ≤ 100,000)์— ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๊ฑท๊ฑฐ๋‚˜ ์ˆœ๊ฐ„์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ, ์ˆ˜๋นˆ

yunaaaas.tistory.com


def bfs(n, k):
    queue = deque([n])
    visited[n] = True
    dist_value[n] = str(n)
    while queue:
        now = queue.popleft()
        for move in [now+1, now-1, now*2]:
            if 0 <= move < MAX and not visited[move]:
                visited[move] = True
                dist_value[move] = now
                queue.append(move)
                dist[move] = dist[now]+1
    return dist[k]


def print_path(n,k):
    if n!=k:
        print_path(n, dist_value[k])
    print(k, end=' ')



if __name__ == '__main__':
    n, k = map(int,input().split())
    MAX = 200000
    sys.setrecursionlimit(MAX)
    visited = [False]* (MAX+1)
    dist = [0]* (MAX+1)
    dist_value = [0] * (MAX+1) 
    print(bfs(n,k))
    print_path(n,k)

 

 

๋ฐ˜์‘ํ˜•