μƒˆμ†Œμ‹

μ•Œκ³ λ¦¬μ¦˜/BaekJoon

BOJ 4673번: μ…€ν”„ λ„˜λ²„

  • -
728x90

문제

μ…€ν”„ λ„˜λ²„λŠ” 1949λ…„ 인도 μˆ˜ν•™μž D.R Kaprekarκ°€ 이름을 λΆ™μ˜€λ‹€

μ–‘μ˜ μ •μˆ˜ n에 λŒ€ν•΄μ„œ d(n)을 nκ³Ό n의 각 자리수λ₯Ό λ”ν•˜λŠ” ν•¨μˆ˜λΌκ³  μ •μ˜ν•˜μž

예λ₯Ό λ“€μ–΄ d(75)=75+7+5=87이닀

μ–‘μ˜ μ •μˆ˜ n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, 이 수λ₯Ό μ‹œμž‘ν•΄μ„œ n, d(n),d(d(n)),d(d(d(n))),....κ³Ό 같은 λ¬΄ν•œ μˆ˜μ—΄μ„ λ§Œλ“€ 수 μžˆλ‹€

μƒμ„±μžκ°€ μ—†λŠ” 숫자λ₯Ό μ…€ν”„ λ„˜λ²„λΌκ³  ν•œλ‹€

100보닀 μž‘μ€ μ…€ν”„ λ„˜λ²„λŠ” 1,3,5,7,9,20,31,42,53,64,75,86,97 총 13κ°œκ°€ μžˆλ‹€

10000보닀 μž‘κ±°λ‚˜ 같은 μ…€ν”„ λ„˜λ²„λ₯Ό ν•œ 쀄에 ν•˜λ‚˜μ”© μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ 좜λ ₯ν•œλ‹€

 

좜λ ₯

10000보닀 μž‘κ±°λ‚˜ 같은 μ…€ν”„ λ„˜λ²„λ₯Ό ν•œ 쀄에 ν•˜λ‚˜μ”© μ¦κ°€ν•˜λŠ” μˆœμ„œλ‘œ 좜λ ₯ν•œλ‹€

 

μ½”λ“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
//μž¬κ·€ν•¨μˆ˜
void recursiveFunc(int idx,bool array[])
{
    int sum=0;
    if(idx<10000)
    {
        sum+=idx;
//각 자릿수λ₯Ό 더함
        while(idx>0){
            sum+=(idx%10);
            idx/=10;
        }
//ν•΄λ‹Ή μžλ¦Ώμˆ˜μ— 체크함
        if(array[sum]==false&&sum<10000)
            array[sum]=true;
        return recursiveFunc(sum,array);
    }
    else{
        return ;
    }
}
 
int main() {
    bool array[10000]={false,};
    for(int i=1;i<10000;i++)
    {
        recursiveFunc(i,array);
    }
    for(int i=1;i<10000;i++){
        if(array[i]==false){
            printf("%d\n",i);
        }
    }
    return 0;
}
cs

*κ°„λ‹¨ν•œ ν•΄μ„€*

이 문제의 경우 μž¬κ·€ν•¨μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆλƒλ₯Ό λ¬Όμ–΄λ³΄λŠ” λ¬Έμ œμ΄λ‹€

10000개의 bool 배열을 λ§Œλ“  ν›„ μ…€ν”„ λ„˜λ²„λ₯Ό μ²΄ν¬ν•˜λŠ” ν•¨μˆ˜μ—μ„œ λ§Œμ•½ ν•΄λ‹Ή μˆ«μžκ°€ λ‚˜μ˜¨λ‹€λ©΄ κ·Έ μžλ¦¬μ— trueλ₯Ό λ„£λŠ”λ‹€

λͺ¨λ“  체크가 λλ‚œ ν›„ false 값을 가진 λ°°μ—΄μ˜ 자리 값을 좜λ ₯ν•˜λ©΄ λœλ‹€

μ˜ˆμ™Έ 체크 같은 경우 μ…€ν”„ λ„˜λ²„λ₯Ό κ³„μ‚°ν•˜λŠ” κ³Όμ •μ—μ„œ 10000을 λ„˜λŠ” κ²½μš°μ™€ idxκ°€ 10000을 λ„˜λŠ” 경우 두 κ°œμ΄λ‹€

κ·Έλ¦Όκ³Ό 같은 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ±°μ³μ„œ μ§„ν–‰λœλ‹€

μ§€κΈˆ λ³΄λ‹ˆ 이미 true 값을 가지고 μžˆλŠ” idx듀은 체크 ν•˜μ§€ μ•ŠλŠ” 것이 더 계산에 효율적일 것 κ°™λ‹€

 

*λ©”λͺ¨λ¦¬*

1984KB

*μ‹œκ°„*

20ms

*μ–Έμ–΄*

C++14

*μ½”λ“œ 길이*

484B

 

 

*이 λ°©λ²•λ§Œμ΄ λ§žλŠ” 정닡은 μ•„λ‹™λ‹ˆλ‹€.

훨씬 μ’‹κ³  λΉ λ₯Έ λ‹€λ₯Έ μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•Œκ³ λ¦¬μ¦˜ κ³΅λΆ€ν•˜μ‹œλŠ” λΆ„λ“€ ν™”μ΄νŒ…! '0'/*

λ°˜μ‘ν˜•
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.