[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년 부터 다시 시작..! 블로그도 열심히 할 예정이다.

image

Hello, BOJ 2022! 보상 솔브닷 배경을 받았다.

지적 환영합니다

태그:

카테고리:

업데이트:

댓글남기기