PS

[백준] 14562번 태권왕 C++

Eastplanet 2022. 7. 28. 23:21

문제 출처: https://www.acmicpc.net/problem/14562

 

14562번: 태권왕

첫째 줄에 테스트 케이스의 수 C(1 ≤ C ≤ 100)이 주어진다. 둘째 줄부터 C줄에 걸쳐 테스트 케이스별로 현재 점수 S와 T가 공백을 사이에 두고 주어진다. (1 ≤ S < T ≤ 100)

www.acmicpc.net

태균이의 점수를 2배로 만든 뒤 상대의 점수에 3을 더하는 경우와

태균이의 점수에 1을 더하는 경우로 BFS를 사용하여 구할 수 있다.

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
#include <string>

using namespace std;

struct P {
    int score, count, Bscore;
};

int main() {
    ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

    int T;
    cin >> T;
    while (T--) {
        int A, B;
        cin >> A >> B;


        queue<P> q;
        q.push(P{ A,0,B });

        while (!q.empty()) {
            P curr = q.front(); q.pop();
            if (curr.score == curr.Bscore) {
                cout << curr.count << "\n";
                break;
            }

            if (curr.score > curr.Bscore)continue;

            q.push(P{ curr.score + 1,curr.count+1,curr.Bscore });
            q.push(P{ curr.score * 2,curr.count+1,curr.Bscore + 3 });


        }


    }
    
}