[Baekjoon/λ°±μ€][4673][C/C++] μ ν λλ²
γλͺ©μ°¨γ
0. κ°μ
1. λ¬Έμ
2. νμ΄
3. μ½λ
0. κ°μ
ν΄λΉ λ¬Έμ μ μκ³ λ¦¬μ¦ λΆλ₯ μ€ νλλ 'λΈλ£¨νΈν¬μ€ μκ³ λ¦¬μ¦'μΌλ‘, λͺ¨λ κ²½μ°μ μλ₯Ό μΌμΌμ΄ λ°μ Έλ³΄λ©° νμ΄μΌ νλ λ¬Έμ μ΄λ€. λ¬Έμ μ μ μλ self numberμ λν κ°λ λ§ μ΄ν΄νλ€λ©΄ μ½κ² ν μ μλ λ¬Έμ μ΄λ€.
1. λ¬Έμ
https://www.acmicpc.net/problem/4673
[λ¬Έμ ]
μ ν λλ²λ 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))), ...κ³Ό κ°μ 무ν μμ΄μ λ§λ€ μ μλ€.
μλ₯Ό λ€μ΄, 33μΌλ‘ μμνλ€λ©΄ λ€μ μλ 33 + 3 + 3 = 39μ΄κ³ , κ·Έ λ€μ μλ 39 + 3 + 9 = 51, λ€μ μλ 51 + 5 + 1 = 57μ΄λ€. μ΄λ°μμΌλ‘ λ€μκ³Ό κ°μ μμ΄μ λ§λ€ μ μλ€.
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...
nμ d(n)μ μμ±μλΌκ³ νλ€. μμ μμ΄μμ 33μ 39μ μμ±μμ΄κ³ , 39λ 51μ μμ±μ, 51μ 57μ μμ±μμ΄λ€. μμ±μκ° ν κ°λ³΄λ€ λ§μ κ²½μ°λ μλ€. μλ₯Ό λ€μ΄, 101μ μμ±μκ° 2κ°(91κ³Ό 100) μλ€.
μμ±μκ° μλ μ«μλ₯Ό μ ν λλ²λΌκ³ νλ€. 100λ³΄λ€ μμ μ ν λλ²λ μ΄ 13κ°κ° μλ€. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
10000λ³΄λ€ μκ±°λ κ°μ μ ν λλ²λ₯Ό ν μ€μ νλμ© μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
[μ λ ₯]
μ λ ₯μ μλ€.
[μΆλ ₯]
10,000λ³΄λ€ μκ±°λ κ°μ μ ν λλ²λ₯Ό ν μ€μ νλμ© μ¦κ°νλ μμλ‘ μΆλ ₯νλ€.
[μμ μ λ ₯ 1]
μμ.
[μμ μΆλ ₯ 1]
1
3
5
7
9
20
31
42
53
64
|
| <-- a lot more numbers
|
9903
9914
9925
9927
9938
9949
9960
9971
9982
9993
2. νμ΄
μ°μ , Self Numberμ λνμ¬ μ΄ν΄ν΄ 보μ.
$d(1)$ | $=1+1$ | $=2$ | 1μ 2μ μμ±μ [2 : μ νλλ²X] |
$d(2)$ | $=2+2$ | $=4$ | 2λ 4μ μμ±μ [4 : μ νλλ²X] |
$d(3)$ | $=3+3$ | $=6$ | 3μ 6μ μμ±μ [6 : μ νλλ²X] |
... | |||
$d(41)$ | $=41+4+1$ | $=46$ | 41μ 46μ μμ±μ [46 : μ νλλ²X] |
... | |||
$d(9999)$ | $=9999+9+9+9+9$ | $=10035$ | 9999λ 10035μ μμ±μ [10035 : μ νλλ²X] |
$d(10000)$ | $=10000+1+0+0+0+0$ | $=10001$ | 10000μ 10001μ μμ±μ [10001 : μ νλλ²X] |
Self Numberμ μ리λ μμ κ°λ€.
d(1)λΆν° d(10000)κΉμ§μ κ°μ ꡬνλ©΄ 10000 μ΄νμ Self Numberκ° μλ λͺ¨λ μκ° κ΅¬ν΄μ§λ€. (β΅d(10000)λΆν°λ κ·Έ κ°μ΄ 무쑰건 10000μ λμ΄κ°κΈ° λλ¬Έ.) λ°λΌμ, κΈΈμ΄κ° 10000μΈ λ°°μ΄μ λ§λ ν (indexκ° 1λ²λΆν° μμνλ€ κ°μ νμ λ κΈΈμ΄κ° 10000μ΄λ€. cμμλ κΈΈμ΄κ° 10001μΈ λ°°μ΄μ λ§λ€μ΄μΌ 1λ²λΆν° 10000λ²κΉμ§μ μλ₯Ό λ€λ£° μ μλ€.) Self Numberμ ν΄λΉνμ§ μλ λ²νΈλ₯Ό μ§μκ°λ€ 보면, λ§μ§λ§μ Self Numberμ ν΄λΉνλ λ²νΈλ§μ΄ λ¨κ² λλ€.
λ°°μ΄μ λ¨μ μ²΄ν¬ μ©λμ΄λ―λ‘, μλ£νμ΄ boolμΈ λ°°μ΄μ μ μΈνμ¬ trueγfalse μ¬λΆλ§ νλ¨νκ² λ§λ€μλ€. μμΈν ꡬν λ΄μ©μ μ£Όμμ μ°Έκ³ λ°λλ€.
3. μ½λ
#pragma warning (disable:4996)
#include <stdio.h>
#include <stdbool.h>//bool μλ£ν μ¬μ© λͺ©μ
bool flag[10001];
/*
main ν¨μ λ΄λΆμ λ°°μ΄ μ μΈ μ, μ€νμμ λ©λͺ¨λ¦¬ μ΄κ³Όλ‘ μ€ν μλ¨.
λ°λΌμ, μ μλ³μλ‘ μ μΈνμ¬ λ°μ΄ν°μμμ ν λΉν΄μΌν¨.
*/
int d(int n) {
return n + (n % 10) + ((n / 10) % 10) + ((n / 100) % 10) + ((n / 1000) % 10);
}
/*
λμ± λ²μ©μ (μΌλ°μ )μΈ λ°©λ²μΌλ‘ dν¨μλ₯Ό μ μν μλ μμ§λ§,
μ¬κΈ°μλ 10000 μ΄νμ μλ‘ λ²μκ° μ νλμ΄ μμΌλ―λ‘,
ν΄λΉ μν©μμλ§ ν¨μκ° μλνλλ‘ μ½λλ₯Ό μ€κ³νμλ€.
*/
int main(int argc, char* argv[]) {
for (int i = 1; i <= 10000; i++)
flag[d(i)] = true; //self numberμ ν΄λΉνμ§ μλ κ°μ trueλ‘ λ³κ²½.
for (int i = 1; i <= 10000; i++)
if (flag[i] == false) //self numberμ ν΄λΉνλ κ°μ falseμ΄λ€.
printf("%d\n", i);
return 0;
}