๐Ÿงฉ Algorithm/[BOJ] Silver

BOJ 16953๋ฒˆ : A -> B (Python/Silver 2)

devCloud 2023. 4. 5. 20:21
728x90
 

16953๋ฒˆ: A → B

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

www.acmicpc.net

๋ฌธ์ œ

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

  • 2๋ฅผ ๊ณฑํ•œ๋‹ค.
  • 1์„ ์ˆ˜์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์ถ”๊ฐ€ํ•œ๋‹ค. 

A๋ฅผ B๋กœ ๋ฐ”๊พธ๋Š”๋ฐ ํ•„์š”ํ•œ ์—ฐ์‚ฐ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž.

 

์ž…๋ ฅ

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

 

์ถœ๋ ฅ

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


์˜ˆ์ œ ์ž…๋ ฅ

2 162

์˜ˆ์ œ ์ถœ๋ ฅ

5

ํ’€์ด

 

โ— 2 -> 162 ๋กœ ๋ฐ”๊ฟ€ ๋•Œ, ๊ฑฐ๊พธ๋กœ ๊ฐ€๋ณด์ž.

1) ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ ์ค‘ 2๋ฅผ ๊ณฑํ•˜๋Š” ๊ฒƒ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 162๋ฅผ 2๋กœ ๋‚˜๋ˆ„์–ด ๋ณด๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•œ๋‹ค.

2) 2๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด๋ฉด ๊ทธ ์ˆ˜์— 2๋ฅผ ๊ณฑํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ์•„๋‹Œ ๊ฒฝ์šฐ 2๋ฅผ ๊ณฑํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๊ฒŒ ๋œ๋‹ค.

3) 162 % 2 = 0์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชซ์ธ 81์— 2๋ฅผ ๊ณฑํ•œ ๊ฒƒ์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ 81์„ ๋‹ค์‹œ 2๋กœ ๋‚˜๋ˆ„๋ฉด ๋‚˜๋จธ์ง€๊ฐ€ 1์ด๋‹ค. 

4) 2๋กœ ๊ณฑํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๊ฒŒ ๋ผ์„œ, ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ ์ค‘ 1์„ ์ˆ˜์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด 8์— 1์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

5) ๊ทธ๋Ÿผ 8์—์„œ 1์„ ๋นผ์•ผ ํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋‹ค. ๋ฌธ์ž์—ด๋กœ ์น˜ํ™˜ํ•ด์„œ 1์„ ์ œ๊ฑฐํ•˜๋ฉด ์ข‹์œผ๋‚˜ 1์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์ˆซ์ž๊ฐ€ ๋ถ™์–ด์žˆ๋‹ค๋ฉด ์ฒ˜๋ฆฌํ•  ์˜ˆ์™ธ ์ƒํ™ฉ์€ ๋Š˜์–ด๋‚˜๊ณ  ์ฝ”๋“œ ๊ธธ์ด ๋˜ํ•œ ๊ธธ์–ด์ง„๋‹ค.

6) ๋”ฐ๋ผ์„œ 3๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ, 81์„ 2๋กœ ๋‚˜๋ˆ„์ง€ ์•Š๊ณ  10์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. ๊ทธ๋Ÿผ 81 % 10 = 1, 81 // 10 = 8 ์ด๋‹ค.

7) 8 // 2 = 4, 4 // 2 = 2 ๊ฐ€ ๋์„ ๋•Œ ์ •์ˆ˜ A์™€ ๊ฐ™์•„์กŒ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

Solution

import sys
input = sys.stdin.readline

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

while a < b:
    if b % 2 != 0 and b % 10 != 1: #๋‘ ์กฐ๊ฑด์ด ์„ฑ๋ฆฝ๋˜์ง€ ์•Š์„ ๋•Œ
        break
    if b % 10 == 1: #ํ™€์ˆ˜์ผ ๋•Œ 10์œผ๋กœ ๋‚˜๋ˆ„๋ฉด 1๋งŒ ๋‚จ๊ฒŒ ๋จ. ๊ทธ๋Ÿผ ์กฐ๊ฑด ํ•˜๋‚˜๊ฐ€ ์„ฑ๋ฆฝ. 
        b //= 10
        cnt += 1
    elif b % 2 == 0: #์ง์ˆ˜์ผ ๋•Œ 2๋ฅผ ๊ณฑํ•œ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ์กฐ๊ฑด ํ•˜๋‚˜๊ฐ€ ์„ฑ๋ฆฝ
        b //= 2
        cnt += 1

if a == b:
    print(cnt + 1)
else:
    print('-1')

 

ํ‹€๋ฆฐ ์ฝ”๋“œ

import sys
input = sys.stdin.readline

a, b = map(int,input().split())
cnt = 0
while a < b:
    if b % 2 != 0:
        if b <= 10:
            b //= 2
            cnt += 1
        else:
            str_b = str(b)
            b = int(str_b[:-1])
            cnt += 1
    elif b % 2 == 0:
        b //= 2
        cnt += 1

if a == b:
    print(cnt + 1)
else:
    print('-1')

์ฃผ์–ด์กŒ๋˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ๋ชจ๋‘ ๋งž์•˜์œผ๋‚˜ ์ œ์ถœ ๊ฒฐ๊ณผ๋Š” ์˜ค๋‹ต์ด๋‹ค.

๋ฐ˜๋ก€: 2 43

๋‹ต : -1
์‹ค์ œ ์ถœ๋ ฅ : 3

 

10์œผ๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ 1์ด์—ฌ์•ผ๋งŒ ์กฐ๊ฑด์ด ์„ฑ๋ฆฝํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์œ„ ์ฝ”๋“œ๋Š” ๋‚˜๋จธ์ง€๊ฐ€ 1์ด ์•„๋‹Œ ๊ฒฝ์šฐ๊นŒ์ง€ ํฌํ•จ์‹œ์ผœ์„œ ํ‹€๋ฆฐ ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ 83์„ 10์œผ๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ 1์ด ์•„๋‹Œ๋ฐ๋„ ๋ชซ์ด 4์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง์ˆ˜์ผ ๋•Œ์˜ ์ฝ”๋“œ๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ๊ทธ๋ž˜์„œ ์ง์ˆ˜, ํ™€์ˆ˜๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒŒ ์•„๋‹Œ 10์œผ๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ 1์ธ ๊ฒƒ๋งŒ ๊ณ„์‚ฐํ•˜๋„๋ก ํ•œ๋‹ค.

728x90