[BOJ]24268 : 2022는 무엇이 특별할까?(c++)
Updated:
[문제] : https://www.acmicpc.net/problem/24268
[풀이]
0부터 d-1을 가진 배열을 만들어 순열을 사용하였다. 배열이 0부터 시작한 경우를 제외하고 만들어진 배열이 N보다 크다면 그 수가 정답이다. next_permutation 사용시 오름차순으로 값을 생성하기 때문에 가장 먼저 조건을 통과하는 수가 정답이다.
[코드]
#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;
vector<int> v;
string a;
int d;
long long isitanswer() {
if (v[0] == 0) return -1;
long long realnum = 0;
long long othernum = 0;
long long se = 0;
long long se2 = 0;
for (int i = d - 1; i >= 0; --i)
{
realnum += v[i]*pow(d, se);
se++;
}
for (int i = a.size() - 1; i >= 0; --i)
{
othernum += (a[i] - '0') * pow(10, se2);
se2++;
}
if (othernum < realnum) return realnum;
else return -1;
}
int main(void)
{
cin >> a;
cin >> d;
v.resize(d);
for (int i = 0; i < d; ++i)
{
v[i] = i;
}
long long ans;
bool flag = false;
while (next_permutation(v.begin(), v.end()))
{
ans = isitanswer();
if (ans != -1) {
flag = true;
break;
}
}
if (flag == true)
{
cout << ans << endl;
}
else
cout << -1 << endl;
}
[느낀점]
Hello, BOJ 2022! 백준 대회의 A번 문제이다. 백준 대회는 처음 참가해봤는데 일이 있어 A번 문제 밖에 풀어보지 못했다. 1년 정도 알고리즘을 손놓았었는데 2022년 부터 다시 시작..! 블로그도 열심히 할 예정이다.
Hello, BOJ 2022! 보상 솔브닷 배경을 받았다.
지적 환영합니다
댓글남기기