BOJ - 16953

주의·2023년 11월 9일
0

boj

목록 보기
1/214

백준 문제 링크

A -> B

❓ 접근법

  1. 정수 A와 B가 다를 때
  2. 정수 A가 B보다 크면 break.
  3. 정수 B 끝자리가 1이면 B에서 1을 빼고 10으로 나누자.
  4. 정수 B가 짝수이면 B를 2로 나누자.
  5. 정수 B가 2,3,4 조건을 만족하지 못할 때도 break.
  6. cnt+1 반환

👌🏻 코드

x,y = map(int, input().split(" ")) 
cnt = 0
while x != y:
    if x > y:
        cnt = -2
        break
    elif str(y)[-1] == '1':
        y -= 1
        y = y // 10
        cnt += 1
    elif y % 2 == 0:
        y = y // 2
        cnt += 1
    else:
        cnt = -2
        break
        
print(cnt + 1)

# cnt를 -2로 설정해 준 이유는 정상적인 예제의 경우 최솟값에 +1을 더하고, 
그렇지 않은 예제의 경우 -1을 출력해야 해서 cnt를 -2로 설정하고
cnt+1을 출력하기 위함이다.
        

❌ 틀린 코드

x,y = input().split(" ")
x = int(x)
y = list(str(y))

count = 0

z = int(''.join(y))


while True:
    
    if z % 2 == 0:
        if z == x:
            count += 1
            break
            
        else:
            z = int(z / 2)
            y = list(str(z))
            count += 1
    
    elif z % 2 == 1:
        y = list(str(z))[:-1]
        if len(y) != 0:
            z = int(''.join(y))
            count += 1
        else:
            count = -1
            break
    

print(count)

# 처음 짰던 코드는 예시는 다 맞았지만 제출에서 틀렸다.ㅠㅠ

0개의 댓글