[c++] BOJ 1038๋ฒˆ :: ๊ฐ์†Œํ•˜๋Š” ์ˆ˜

๊ฐ์†Œํ•˜๋Š” ์ˆ˜

https://www.acmicpc.net/problem/1038

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งž์€ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
1 ์ดˆ 512 MB 9364 2348 1876 29.716%

๋ฌธ์ œ

์Œ์ด ์•„๋‹Œ ์ •์ˆ˜ X์˜ ์ž๋ฆฟ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ํฐ ์ž๋ฆฟ์ˆ˜๋ถ€ํ„ฐ ์ž‘์€ ์ž๋ฆฟ์ˆ˜๊นŒ์ง€ ๊ฐ์†Œํ•œ๋‹ค๋ฉด, ๊ทธ ์ˆ˜๋ฅผ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 321๊ณผ 950์€ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜์ง€๋งŒ, 322์™€ 958์€ ์•„๋‹ˆ๋‹ค. N๋ฒˆ์งธ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. 0์€ 0๋ฒˆ์งธ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜์ด๊ณ , 1์€ 1๋ฒˆ์งธ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜์ด๋‹ค. ๋งŒ์•ฝ N๋ฒˆ์งธ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๊ฐ€ ์—†๋‹ค๋ฉด -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 1,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— N๋ฒˆ์งธ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜

  • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • ๋ธŒ๋ฃจํŠธ ํฌ์Šค

๋‚˜์˜ ๋‹ต

์ƒ๊ฐ์˜ ํ๋ฆ„

  1. ์™„์ „ ํƒ์ƒ‰ (๋ฌด์‹ํ•˜๊ฒŒ ๊ตฌํ˜„)

    ์ฒ˜์Œ์—๋Š” ์ˆซ์ž๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œ์ผœ ํ•˜๋‚˜ํ•˜๋‚˜ ์กฐ๊ฑด๊ฒ€์‚ฌ๋ฅผ ํ•˜๋ฉด์„œ ํ•ด๋‹น index๊นŒ์ง€ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋ฅผ ๋‹ด๋Š” arr๋ฅผ ์ฑ„์šฐ๋ฉฐ ๊ณ„์‚ฐํ•ด๋‚˜๊ฐ€๋ ค๊ณ  ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ๋„ ํ•˜๊ณ  ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋Š” 9876543210 ์ดํ›„ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋ฐ, ์ด๋ณด๋‹ค ํฐ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๊ณ„์‚ฐ๋งŒ ์˜ค๋ž˜ํ•˜๊ณ  ๊ฒฐ๊ตญ์—” -1 ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผํ•จ์„ ๊นจ๋‹ฌ์•˜๋‹ค.

  2. ์™„์ „ ํƒ์ƒ‰ (๋ฐ˜๋Œ€๋กœ ์ƒ๊ฐ)

    ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ˜๋Œ€๋กœ ์ƒ๊ฐํ•ด์„œ ์ˆซ์ž๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ํ•˜๋‚˜์”ฉ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ์ฐพ์•„์„œ index์— ์ง‘์–ด๋„ฃ์–ด๋ณด์ž. ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋Š” ๋” ๋†’์€ ์ž๋ฆฟ์ˆ˜์˜ ์ˆซ์ž๊ฐ€ ๋‚ฎ์€ ์ž๋ฆฟ์ˆ˜์˜ ์ˆซ์ž๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ ํŠน์„ฑ์„ ์ด์šฉํ•˜๋ฉด ์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ฒ˜์Œ ๋– ์˜ฌ๋ฆฐ ์ƒ๊ฐ์ด i, j์—์„œ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์ˆ˜๋ฅผ ๋Œ€์ž…ํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค๋ฉด, ์ด์ œ๋Š” j๊ฐ€ i๋ณด๋‹ค ์ž‘์€ ๋ฒ”์œ„ ๋‚ด์—์„œ ๋Œ€์ž…ํ•ด๋ณด๋Š” ๊ฒƒ์ด๋‹ค.

    ํ•˜์ง€๋งŒ ๋˜ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ์ž๋ฆฟ์ˆ˜๊ฐ€ 2์ž๋ฆฌ ์ผ ๋•Œ๋Š” i์™€ j๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜์ง€๋งŒ ๋” ์ปค์ง€๋ฉด for๋ฌธ์ด ๋„ˆ๋ฌด ์ค‘์ฒฉ๋˜๊ณ  ์ด๋Š” ๋ฐ˜๋ณต ๊ณ„์‚ฐ์ธ ๊ฑฐ ๊ฐ™๋‹ค.

  3. ๋ฐ˜๋ณต ๊ณ„์‚ฐ ์ค„์ด๊ธฐ

    2๋ฒˆ ๊ณ„์‚ฐ๊ณผ ๋˜‘๊ฐ™์ด ๊ตฌํ˜„ํ–ˆ์œผ๋‚˜ ๋‹ฌ๋ผ์ง„ ๊ฒƒ์€ i์—์„œ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ, j์™€ k์˜ ๊ด€๊ณ„๊นŒ์ง€ ๊ณ ๋ คํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค. (๊ณ„์‚ฐ ์‹œ for๋ฌธ์ด 2๋ฒˆ๋งŒ ํ•„์š”ํ•จ). ์•„๋ž˜ ์ฝ”๋“œ์— ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„ ๋ฐฉ์‹์ด ๋‚˜์™€์žˆ๋‹ค.

์ฝ”๋“œ
#include <iostream>
#include <cmath>

using namespace std;

long long arr[10][100000] = {};
int N;
int idx = 0;
int digit = 0;
int tmp_index[10];

long long arrN() {
    int idx = 1;
    int n = N - 9;
    while (idx <= 9&&n > tmp_index[idx]) {
        n -= tmp_index[idx++];
    }
    if (idx > 9)
        return -1;
    return arr[idx][n-1];
}

long long saveDecline() {
    do{
        digit++;
        tmp_index[digit] = 0;
        for (int i = 1; i < 10; i++) { // 1~9
            for (int j = 0; j < sizeof(arr[digit - 1])/sizeof(int); j++) { // ์ด์ „ ์ž๋ฆฌ์ˆ˜ ๋ฐฐ์—ด ๋Œ๋ฉด์„œ
                if (arr[digit - 1][j] / pow(10, digit-1) < i) {
                    arr[digit][tmp_index[digit]++] = i * pow(10, digit) + arr[digit - 1][j];
                    idx++;
                }
                else
                    break;
            }
        }
    } while (idx < N && digit < 9);

    return arrN();
}

int main() {
    cin >> N;
    for (int i = 0; i < 10; i++) {
        arr[digit][i] = i;
    }

    if (N<10)
        cout << arr[digit][N];
    else {
        cout<< saveDecline();
    }
}
์„ค๋ช…

main()

์šฐ์„  arr์— ํ•œ ์ž๋ฆฌ ์ˆ˜ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋ฅผ ๋„ฃ๋Š”๋‹ค. N์ด 10๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋ฐ”๋กœ ํ•ด๋‹น ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ  10๋ณด๋‹ค ํฌ๋ฉด arr๋ฅผ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด saveDecline ํ•จ์ˆ˜์— ๋“ค์–ด๊ฐ„๋‹ค.

saveDecline()

์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด digit๋ฅผ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ๊ฐ digit(์ž๋ฆฟ์ˆ˜)๋งˆ๋‹ค 1~9๊นŒ์ง€ ๋Œ๋ฉด์„œ ํ˜„์žฌ ์ž๋ฆฟ์ˆ˜๋ณด๋‹ค ํ•œ ์ž๋ฆฌ ๋‚ฎ์€ ์ž๋ฆฌ์˜ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋ฅผ ์ˆœํšŒํ•œ๋‹ค. ์ˆœํšŒํ•˜๋Š” ์ˆ˜์˜ ๊ฐ€์žฅ ๋†’์€ ์ž๋ฆฌ ์ˆ˜๊ฐ€ ํ˜„์žฌ ๋„๋Š” index๋ณด๋‹ค ๋‚ฎ์œผ๋ฉด ๋”ํ•ด์„œ ์ˆซ์ž๋กœ ๋งŒ๋“ ๋‹ค. (3์ž๋ฆฌ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ, index๊ฐ€ 2๋ฉด 2์ž๋ฆฌ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜ ์ค‘์— 10์ด ๊ฐ€์žฅ ๋†’์€ ์ž๋ฆฌ ์ˆ˜๊ฐ€ 1์ด๋ฏ€๋กœ 2์™€ ํ•ฉ์ณ์งˆ ์ˆ˜ ์žˆ๋‹ค.)

1~9๊นŒ์ง€ ๋‹ค ๋Œ๋ฉด digit๋ฅผ 1๋Š˜๋ ค์„œ ๋‹ค์Œ ์ž๋ฆฟ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์ž๋ฆฟ์ˆ˜๋งˆ๋‹ค ๋ช‡๊ฐœ์˜ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ๋‚˜์ค‘ ๊ณ„์‚ฐ์„ ์œ„ํ•ด ์ €์žฅํ•ด๋‘”๋‹ค. arr์— ์›์†Œ๋ฅผ ์‚ฝ์ž… ํ•  ๋•Œ๋งˆ๋‹ค ์ „์—ญ๋ณ€์ˆ˜ index๋ฅผ 1์”ฉ ๋Š˜๋ ค index๊ฐ€ N์„ ๋„˜์–ด์„œ๋ฉด ๊ทธ๋งŒ ๊ณ„์‚ฐํ•˜๋„๋ก do-while๋ฌธ์˜ ์กฐ๊ฑด์œผ๋กœ ์ค€๋‹ค.

*์—ฌ๊ธฐ์„œ do-while๋ฌธ์˜ ์กฐ๊ฑด์— digit>9๊ฐ€ ์žˆ๋Š” ์ด์œ ๋Š” 9876543210 ๋ผ๋Š” 10์ž๋ฆฌ ์ˆ˜ ์ดํ›„์— ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ arr๋ฅผ ์ฃผ์–ด์ง„ N๊ฐœ ์ด์ƒ์œผ๋กœ ์ฑ„์šฐ๊ณ  ๋‚˜๋ฉด ์ถœ๋ ฅํ•  ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” arrN ํ•จ์ˆ˜์— ๋“ค์–ด๊ฐ„๋‹ค.

arrN()

arrN ํ•จ์ˆ˜์—์„œ๋Š” ์ฃผ์–ด์ง„ N์—์„œ ์ž๋ฆฟ์ˆ˜๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ์–ด๋–ค ์ž๋ฆฟ์ˆ˜์˜ ๋ช‡ ๋ฒˆ์งธ ์นธ์— (arr์˜ ๋ช‡ ํ–‰ ๋ช‡ ์—ด์—) ์ˆ˜๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š”์ง€ ๊ณ„์‚ฐํ•œ๋‹ค. ๋งŒ์•ฝ ์˜ˆ์ œ์™€ ๊ฐ™์ด 18๋ฒˆ์งธ ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค๋ฉด ํ•œ ์ž๋ฆฌ์ˆ˜์˜ ๊ฐฏ์ˆ˜์ธ 10๋ณด๋‹ค๋Š” ํฌ๋ฏ€๋กœ mainํ•จ์ˆ˜์—์„œ ํ†ต๊ณผ๋˜์–ด ๋“ค์–ด์™”์„ ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ N์—์„œ 9์„ ๋นผ๊ณ  9์ด ๋‚จ๋Š”๋‹ค. ์ž๋ฆฟ์ˆ˜๋Š” 1์ฆ๊ฐ€ํ•˜๋ฉฐ ๋‘ ์ž๋ฆฌ์ˆ˜ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ณด๋Š”๋ฐ, 45๊ฐœ ์ด๋ฏ€๋กœ 8๋ณด๋‹ค ์ž‘์œผ๋‹ˆ ํ•ด๋‹น ํ–‰์˜ N๋ฒˆ์งธ์— ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๋Š” ์ˆ˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค. (arr[1][7])

*N์—์„œ 10์„ ๋นผ์ง€ ์•Š๊ณ  9์„ ๋นผ๋Š” ์ด์œ ๋Š” ํ•œ ์ž๋ฆฌ ์ˆ˜์˜ ์˜ˆ์ œ๋กœ ์ƒ๊ฐํ•ด๋ณด์ž. 5๋ฒˆ์งธ ์ˆ˜๋ฅผ ์ฐพ์œผ๋ ค๋ฉด arr์˜ ํ•œ ์ž๋ฆฌ์ˆ˜ ํ–‰์— ์žˆ๋Š” 6๋ฒˆ์งธ ๊ฐ’์„ ๊ฐ€์ ธ์™€์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ N๋ฒˆ์งธ ์ˆ˜๊ฐ€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 9๋ฅผ ๋นผ์ฃผ์–ด์•ผํ•œ๋‹ค.

*๋ฐฐ์—ด์˜ index๊ฐ€ ํ—ท๊ฐˆ๋ฆฌ๊ฒŒ ๋˜์–ด์žˆ๋‹ค. ํ•ด๋‹น ํ–‰์˜ N๋ฒˆ์งธ์— ์กด์žฌํ•˜๋ฏ€๋กœ arr[ํ•ด๋‹น ํ–‰][N-1] ์„ returnํ•ด์•ผํ•œ๋‹ค.

๊ฒฐ๊ณผ

arr๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฑ„์›Œ์ง„๋‹ค. ๋งˆ์ง€๋ง‰ 10์ž๋ฆฌ ์ˆ˜ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜๋Š” 9876543210 ํ•˜๋‚˜์ด๊ณ  ๊ทธ ์ดํ›„๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ตฌํ˜„ํ•ด๋ณธ ๊ฒฐ๊ณผ 1022๋ฒˆ์งธ ์ˆ˜๊ฐ€ 9876543210์ด๊ณ  1023๋ถ€ํ„ฐ๋Š” -1์ด ๋‚˜์™€์•ผํ•œ๋‹ค.


๋‹ค๋ฅธ ๋‹ต

https://blog.encrypted.gg/142

BaaaaaakingDog ๋‹˜์˜ ํ’€์ด๋Š” ๋จผ์ € ์ง‘ํ•ฉ์˜ ํŠน์„ฑ์„ ์ด์šฉํ•ด์„œ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ตœ๋Œ€ 1023๊ฐœ๋ฐ–์— ์—†์Œ์„ ์•Œ์•„๋‚ด๊ณ , 1023๊ฐœ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ ํ›„ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

=> ๋น„ํŠธ ๋งˆ์Šคํฌ๋ฅผ ์ด์šฉํ•˜์˜€๋‹ค. (๋„ˆ๋ฌด ๋Œ€๋‹จํ•˜์‹ฌ.. ํ‘ํ‘)

https://postbarca.tistory.com/46

ํ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ๋ฉ‹์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•