728x90
#include <stdio.h>
int d(int n) {
int sum = n;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return sum;
}
int main() {
int num[10001] = { 0 };
for (int i = 1; i <= 10000; i++) {
if (d(i) <= 10000) num[d(i)] = -1;
}
for (int i = 1; i <= 10000; i++) {
if (num[i] != -1) printf("%d\n", i);
}
}
이 문제는 원리를 이해하고 푸는 문제다.
인터넷을 열심히 뒤져서 알아내고 이해하였다.
먼저 int d(int d)의 설명을 하자면
이 묶음이 셀프 넘버의 원리를 담았다고 볼 수 있다.
나누기와 나머지 구하기로 각 자릿수를 만들었다.
그리고 나머지로 된 것을 sum으로 더해서 반환한다.
메인을 설명해보자면
num는 10000까지라고 했으므로 배열을 만들어놓았고
for문
왜 이 2번을 해야 하는지 모르겠어서 한번 elif로 시도했으나 돌아가지 않았다.
꼭 2번을 나누어서 해주어야 하는 것 같다.
계속 반복해 주면서 i를 더해주는 것이고
d(i)가 함수를 의미하는 것으로 보인다.
함수 호출해서 sum이 10000이하이게 되면
num[d(i)]를 -1로 해주고 나면
다시 세준다.
그래서 -1이 아니라면
출력을 해주면 된다.
https://www.acmicpc.net/problem/4673
728x90
'C language > Baekjoon' 카테고리의 다른 글
[C] 백준 11654번 풀이: 아스키 코드 (0) | 2021.07.05 |
---|---|
[C] 백준 1065번 풀이: 한수 (0) | 2021.07.03 |
[C] 백준 15996번 풀이: 정수 N개의 합 (0) | 2021.07.03 |
[C] 백준 4344번 풀이: 평균은 넘겠지 (0) | 2021.07.03 |
[C] 백준 2588번 풀이: 곱셈 (0) | 2021.07.03 |