티스토리 뷰
문제링크 : https://www.acmicpc.net/problem/14562
14562번: 태권왕
첫째 줄에 테스트 케이스의 수 C(1 ≤ C ≤ 100)이 주어진다. 둘째 줄부터 C줄에 걸쳐 테스트 케이스별로 현재 점수 S와 T가 공백을 사이에 두고 주어진다. (1 ≤ S < T ≤ 100)
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
struct Info
{
int s, t, cnt;
};
void bfs(int S, int T, int CNT)
{
queue<Info>q;
q.push({S,T,CNT});
while(!q.empty())
{
Info cur = q.front(); q.pop();
if(cur.s > cur.t) continue;
else if(cur.s == cur.t)
{
cout << cur.cnt <<"\n";
break;
}
q.push({cur.s * 2, cur.t + 3, cur.cnt+1}); //발차기 1번
q.push({cur.s + 1, cur.t, cur.cnt+1}); //발차기 2번
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int C;
cin >> C;
while(C--)
{
int S, T;
cin >> S >> T;
bfs(S,T,0);
}
return 0;
}
BFS 문제이다.
발차기의 경우가 S가 2배, T가 + 3 또느 S만 +1 이렇게 2가지가 있다.
큐에 S의 점수, T의 점수, 카운트를 넘겨준다.
S가 T보다 커지는 순간부터는 무조건 같지 않게 되므로 continue;로 넘기고, 같아 질때 출력한다.
발차기가 2가지 이므로 큐에 현재 S*2, T+3, 카운트 / S+1, T, 카운트 이렇게 2가지를 같이 넣어주며, S와 T가 맞는 순간에 출력하고 break 해준다.
'백준 > 실버' 카테고리의 다른 글
| [백준 11292번] 키 큰 사람 (C++) (0) | 2023.06.04 |
|---|---|
| [백준 14715번] 전생했더니 슬라임 연구자였던 건에 대하여 (easy) (C++) (0) | 2023.06.02 |
| [백준 12845번] 모두의 마블 (C++) (0) | 2023.05.30 |
| [백준 11561번] 징검다리 (C++) (0) | 2023.05.28 |
| [백준 25192번] 인사성 밝은 곰곰이 (C++) (0) | 2023.05.26 |