꿈꾸는 개발자의 devLog
[BaekJoon] "그리디" - 백준 16953번 문제 : A -> B 본문
반응형
[문제 설명]
https://www.acmicpc.net/problem/16953
16953번: A → B
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
www.acmicpc.net
정수 A를 B로 바꿔려고 함. 가능한 연산은 다음과 같은 두 가지임
1. 2를 곱함
2. 1을 수의 가장 오른쪽에 추가함
A를 B로 바꾸는데 필요한 연산의 최솟값 구함
출력: 연산의 최솟값 +1, 만들 수 없는 경우에 -1 출력
[해결 로직]
- 거꾸로 연산을 하면됨
- 곱하기 2는 나누기 2로, 1을 오른쪽에 추가하는건 반대로 1을 빼서 10으로 나눈 몫임
- 10으로 나누는게 더 크기 때문에, 10으로 나눴을 때의 나머지가 1인 경우 먼저 확인
- 그 다음에 2로 나눠떨어지는지 확인
- 이러한 연산을 반복하면서 연산 횟수 카운팅
- 모든 연산이 다 끝난 후에 숫자가 입력된 N과 같은 경우에는 cnt +1 출력, 그렇지 않으면 -1 출력
[Solution 코드]
n,m = map(int, input().split())
## 곱하기 2는 나누기 2로
## 1을 오른쪽에 추가하는건 반대로 1을 빼서 10으로 나눈 몫임
cnt = 0
while m != n and m > 0:
if (m % 10) == 1: ## 이 조건을 해줘야함 단순이 홀짝인지만 확인하면 안됨
m = int((m-1)//10)
cnt += 1
elif m % 2 == 0: ## 먼저 2로 나눠 떨어지는지 확인
m = int(m // 2)
cnt += 1
else:
cnt = -1
break
if m != n:
print(-1)
else:
print(cnt + 1)
반응형
'Algorithm > BaekJoon' 카테고리의 다른 글
[BaekJoon] "구현" - 백준 10994번 문제 : 별 찍기 - 19 (0) | 2024.01.18 |
---|---|
[BaekJoon] "완전탐색" - 백준 2422번 문제 : 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2024.01.18 |
[BaekJoon] "DFS/BFS" - 백준 16234번 문제 : 인구 이동 (1) | 2024.01.18 |
[BaekJoon] "DFS/BFS" - 백준 14940번 문제 : 쉬운 최단 거리 (1) | 2024.01.18 |
[BaekJoon] "구현" - 백준 1244번 문제 : 스위치 켜고 끄기 (0) | 2024.01.18 |
Comments