PS/Baekjoon Online Judge

[백준 16953] A → B [C/C++]

kimyoungrok 2021. 8. 20. 14:31

백준 - 16953


풀이

Queue에 연산값과 최솟값을 저장해주어, 연산값이 B가 될 때까지 탐색해주는 방식으로 풀이했다.

처음으로 들어오는 값이 1e8일 경우 10을 곱해주면 int의 범위를 벗어나므로 num은 long long으로 담아주었다.

만약 연산이 불가능하다면, num == B 조건을 만족하지 못하고 모든 Queue가 비었다는 것이므로, -1을 출력하면 된다.


소스코드

#include <stdio.h>
#include <queue>
using namespace std;
void bfs(int A, int B){
    queue<pair<int, int> > q;
    q.push(make_pair(A, 1));

    while (!q.empty()){
        long long num = q.front().first;
        int cnt = q.front().second;
        q.pop();

        if (num == B){
            printf("%d", cnt);
            return;
        }
		
        if (num*2 <= B) q.push(make_pair(num*2, cnt+1));
        if (num*10 +1 <= B) q.push(make_pair(num*10 +1, cnt+1));
    }
    printf("-1");
}
int main(){
    int A, B;
    scanf("%d %d", &A, &B);
    bfs(A, B);
}

출처

 

16953번: A → B

첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.

www.acmicpc.net

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 10830] 행렬 제곱 [C]  (0) 2021.08.21
[백준 13172] Σ [C]  (0) 2021.08.20
[백준 5639] 이진 검색 트리 [C]  (0) 2021.08.19
[백준 2879] 코딩은 예쁘게 [C]  (0) 2021.08.19
[백준 1082] 방 번호 [C]  (0) 2021.08.19