728x90
문제 접근
1. 입력받은 값의 자릿수를 구한다.
2. 입력받은 값에서 자릿수*9한 값부터 따져서 가장 처음 걸리는 조건이 최솟값, 없으면 0을 출력
느낀점
처음에 백만까지 입력을 받았을 경우 어떻게 해야하나 고민을 많이 했다. 고민 끝에 분해합은 원래 숫자에서 각 자릿수를 더하는 것이기 때문에 한 자릿수당 최대 9만큼 빠질 수 있다. 따라서, n자릿수라고 했을 때 제일 작은 생성자는 9*n을 뺀 값부터 시작될 수 있다. 생각보다 정확하게 접근해서 재밌게 풀었다.
코드
#include <stdio.h>
int share(int n) {
int tmp = n, sum = 0;
while (tmp != 0) {
sum += tmp % 10;
tmp /= 10;
}
return sum;
}
int main() {
int n;
scanf("%d", &n);
int tmp = n, length = 0;
int i, flag = 0;
while (tmp!=0) {
tmp /= 10;
length++;
}
for (i = n - 9 * length;i < n;i++) {
if (n == i + share(i)) {
flag = 1;
break;
}
}
flag == 1 ? printf("%d", i) : printf("0");
return 0;
}
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[C] 백준 1018번 : 체스판 다시 칠하기 (0) | 2021.04.11 |
---|---|
[C] 백준 7568번 : 덩치 (0) | 2021.04.08 |
[C] 백준 2798번 : 블랙잭 (0) | 2021.04.03 |
[C] 백준 2447번 : 별 찍기 - 10 (0) | 2021.03.27 |
[C] 백준 10870번 : 피보나치 수 5 (0) | 2021.03.24 |
댓글