
알고리즘 문제 풀이
문제
https://www.acmicpc.net/problem/9465
9465번: 스티커
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의
www.acmicpc.net
풀이
BFS 방식을 선택해서 풀었다.
처음 풀었을 때 예상해 본 테스트케이스가 다 맞았는데 계속 틀려서 당황했는데 범위 문제였다
int 형 초과하는 케이스가 있어서 long long으로 자료형을 바꾸니 통과했다.
소스 코드
#define _CRT_SECURE_NO_WARNINGS
// Library
#include <iostream>
#include <string>
#include <stack>
#include <set>
#include <queue>
#include <deque>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <map>
#include <cctype>
#include <set>
#include <string.h>
#include <string>
// std::
using namespace std;
// Value
long long N, A, B;
// Matrix direction
//int dx[4] = { 0, 0, 1, -1 };
//int dy[4] = { 1, -1, 0, 0 };
// Sturct
//struct st {
//};
int BFS() {
long long result = 0x7f7f7f7f;
queue<pair<long long, long long>> q;
q.push({ A, 0 });
while (!q.empty()) {
long long num = q.front().first;
long long cnt = q.front().second;
q.pop();
if (num == B) {
result = min(result, cnt);
return result + 1;
}
if ((num * 10 + 1) <= B) {
q.push({ (num * 10 + 1), cnt + 1 });
}
if ((num * 2) <= B) {
q.push({ (num * 2), cnt + 1 });
}
}
if (result == 0x7f7f7f7f)
return -1;
}
// Main function
int main() {
// cin, cout
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// BOJ Format
cin >> A >> B;
N = BFS();
cout << N << '\n';
return 0;
}'Programming Practice > BOJ' 카테고리의 다른 글
| [BOJ] 백준 9465 스티커 (C++) (0) | 2022.04.27 |
|---|---|
| [BOJ] 백준 1991 트리 순회 (C++) (0) | 2022.04.26 |
| [BOJ] 백준 1932 정수 삼각형 (C++) (0) | 2022.04.24 |
| [BOJ] 백준 2407 조합 (C++) (0) | 2022.04.21 |
| [BOJ] 백준 15650 N과 M (2) (C++) (0) | 2022.04.20 |