๐Ÿ’ป Algorithm/Python

[Python] ๋ฐฑ์ค€ 16953 A → B (Greedy/BFS)

์„ ์ฃผ 2022. 7. 8. 19:27

๐Ÿ“Œ ๋ฌธ์ œ

์ˆ˜ A๋ฅผ B๋กœ ๋ฐ”๊พธ๋ ค๊ณ  ํ•œ๋‹ค. ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€์ด๋‹ค.

 

2๋ฅผ ๊ณฑํ•œ๋‹ค.
1์„ ์ˆ˜์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
A๋ฅผ B๋กœ ๋ฐ”๊พธ๋Š”๋ฐ ํ•„์š”ํ•œ ์—ฐ์‚ฐ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— A, B (1 ≤ A < B ≤ 109)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

A๋ฅผ B๋กœ ๋ฐ”๊พธ๋Š”๋ฐ ํ•„์š”ํ•œ ์—ฐ์‚ฐ์˜ ์ตœ์†Ÿ๊ฐ’์— 1์„ ๋”ํ•œ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1

2 162

2 → 4 → 8 → 81 → 162

์˜ˆ์ œ ์ถœ๋ ฅ 1

5

์˜ˆ์ œ ์ž…๋ ฅ 2

4 42

์˜ˆ์ œ ์ถœ๋ ฅ 2

-1

์˜ˆ์ œ ์ž…๋ ฅ 3

100 40021

100 → 200 → 2001 → 4002 → 40021

์˜ˆ์ œ ์ถœ๋ ฅ 3

5

 


๐Ÿ“Œ ํ’€์ด

๐Ÿ’ฌ Greedy Code

import sys
input = sys.stdin.readline

a, b = map(int, input().split())
cnt = 1

while a != b:
    if b % 2 != 0: # ํ™€์ˆ˜๋ฉด
        if str(b)[len(str(b))-1] == '1' and b != 1: # ๋์ž๋ฆฌ๊ฐ€ 1์ด๋ฉด 1 ์ œ๊ฑฐ
            b = int(str(b)[:len(str(b))-1])
            cnt += 1
        else: # ์•„๋‹ˆ๋ฉด -1 ์ถœ๋ ฅ
            cnt = -1
            break
    elif b % 2 == 0: # ์ง์ˆ˜๋ฉด ๋‚˜๋ˆ„๊ธฐ 2
        b //= 2
        cnt += 1

print(cnt)

 

๐Ÿ’ก Greedy Solution

Greedy๋กœ ํ’€๋ฉด A์—์„œ B๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฐ˜๋Œ€๋กœ B์—์„œ A๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด ํŽธํ•ฉ๋‹ˆ๋‹ค.

 

1. B๊ฐ€ ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ

- B๊ฐ€ 1๋กœ ๋๋‚˜๋Š” ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ (ex. 11, 31): ๋์ž๋ฆฌ 1์„ ์ œ๊ฑฐํ•œ ํ›„ ํŒ๋‹จ

- B๊ฐ€ 1๋กœ ๋๋‚˜์ง€ ์•Š๋Š” ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ (ex. 57, 43): ๋์ž๋ฆฌ 1์„ ์ œ๊ฑฐํ•  ์ˆ˜๋„, ์ „์ฒด๋ฅผ 2๋กœ ๋‚˜๋ˆŒ ์ˆ˜๋„ ์—†์œผ๋ฏ€๋กœ A๋กœ ๋งŒ๋“ค ์ˆ˜ X

 

2. B๊ฐ€ ์ง์ˆ˜์ธ ๊ฒฝ์šฐ

- ์ „์ฒด๋ฅผ 2๋กœ ๋‚˜๋ˆ”

 

3. B์™€ A๊ฐ€ ๊ฐ™์•„์ง€๋ฉด while๋ฌธ ์ข…๋ฃŒ


๐Ÿ’ฌ BFS Code

import sys
from collections import deque
input = sys.stdin.readline

def bfs():
    q = deque([(a, 1)])
    while q:
        x, dist = q.popleft()
        if x == b:
            print(dist)
            sys.exit(0)
        for nx in [x * 2, int(str(x) + '1')]:
            if nx <= b:
                q.append((nx, dist + 1))
    print(-1)

a, b = map(int, input().split())
bfs()

 

๐Ÿ’ก BFS Solution

์ •์„๋Œ€๋กœ A๋ฅผ B๋กœ ๋งŒ๋“œ๋Š” ํ’€์ด์ž…๋‹ˆ๋‹ค.