1~N까지 완전탐색을 돌려도 시간 제한에 걸리지 않는 문제지만 생성자의 한가지 규칙을 발견하여 적용시켰다.
각 자리수는 0~9의 값만 가지기 때문에 각 자리수의 합은 최대 9 * N을 넘지 못한다.
ex) 99->9+9=18, 999->9+9+9=27
분해합 = 생성자+자리수이므로 생성자의 최솟값은 (분해합 - (9*N)) 인 것을 알 수 있다.
#include <iostream>
using namespace std;
int Solution(int num)
{
int temp = num;
int cnt = 1;
while ((temp /= 10) != 0)
cnt++;
int start = num - (cnt * 9);
for (int i = start; i < num; i++)
{
temp = i;
int sum = temp;
while (temp / 10 != 0)
{
sum += temp % 10;
temp /= 10;
}
sum += temp;
if (sum == num)
{
return i;
}
}
return 0;
}
int main(void)
{
int num;
cin >> num;
cout << Solution(num) << endl;
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
알고리즘 200일 프로젝트 - 5day
내일도 열심히!
'알고리즘 > BOJ' 카테고리의 다른 글
백준 6603번: 로또 (0) | 2020.04.12 |
---|---|
백준 7568번: 덩치 (0) | 2020.04.11 |
백준 14502번: 연구소 (0) | 2020.04.11 |
백준 14501번: 퇴사 (0) | 2020.04.10 |
백준 2309번: 일곱 난쟁이 (0) | 2020.04.10 |