https://www.acmicpc.net/problem/15729
15729번: 방탈출
첫째 줄에 N(1 ≤ N ≤ 1,000,000)가 주어지고 둘째 줄에는 쪽지에 적혀 있는 N자리의 수가 빈 칸을 사이에 두고 주어진다.
www.acmicpc.net
bfs를 이용하여 내림차순으로 구성되있는 수를 찾아내는 문제다. 처음에 0~9까지의 수를 큐에 넣어주고 현재 수의 일의자릿수 보다 작은 수가 있으면 탐색해나가는 형식으로 구현하였다. 숫자가 커질수 있어서 long long int를 사용하였다.
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int N;
int limit;
vector<long long int> v;
void bfs() {
int cnt = 0;
queue<long long int> q;
for(long long int i = 0; i <= 9; i++) {
q.push(i);
v.push_back(i);
cnt++;
}
while(!q.empty()) {
long long int x = q.front();
q.pop();
int start = x % 10 - 1;
for(int i = start ; i >= 0; i--) {
long long int temp = x * 10 + i;
q.push(temp);
v.push_back(temp);
cnt++;
}
}
}
int main() {
cin >> N;
bfs();
sort(v.begin(), v.end());
if(N > 1023) {
cout << -1;
}
else {
cout << v[N - 1];
}
return 0;
}
'백준' 카테고리의 다른 글
백준1089 - 엘리베이터 (0) | 2020.06.14 |
---|---|
백준18115 - 카드 놓기 (0) | 2020.06.12 |
백준2780 - 비밀번호 (0) | 2020.06.07 |
백준17178 - 줄서기 (0) | 2020.06.04 |
백준11779 - 최소비용 구하기 2 (0) | 2020.06.01 |