Search
Duplicate
📒

분해합

주차
문제번호
언어
티어
브론즈
유형
브루트포스
nj_Blog
nj_상태
이해도
풀이
사람
이해도 2
13 more properties

문제접근

0부터 시작하여 분해합을 계속 구하여 생성자를 구한다

놓쳤던 부분

else if (tmp > n) print(0);
C
복사
0부터 구하다가 분해합이 n을 넘어가게 되면 더 이상 계산을 할 필요 없다고 생각했는데 그 이후에도 생성자가 존재할 수 있기 때문에 계속 계산을 해줘야함
다 계산하는 것이 너무 비효율적인 거 같음. 뭔가 시간을 줄일 수 있지 않을까?

코드

2020 KB

12 ms

#include <iostream> int n; void input_setting() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); } void input() { std::cin >> n; } int get_decomposition_sum(int n) { int sum = n; while (1) { sum += n % 10; if (n < 10) break ; n /= 10; } return (sum); } void print(int answer) { std::cout << answer; } void solution() { int tmp; for (int i = 0; i <= 1000000; i++) { tmp = get_decomposition_sum(i); if (tmp == n) { print(i); return ; } else if (tmp > n) { continue ; } } print(0); } int main(void) { input_setting(); input(); solution(); return (0); }
C++
복사