문제
풀이
이 문제는 어떤 임의의 수 n 이 주어졌을 때 n의 생성자 m (m의 분해합이 n이됨) 중 가장 작은 수를 구하는 문제이다. 여기서 분해합은 문제에도 나와있는 예시와 같이 245라는 수가 있으면 245+2+4+5 를 하여 분해합은 256이 된다.
위 분해합에서 (생성자 + 1의자리수 + 10의 자리수 + 100의 자리수) 의 방식으로 분해합을 구한다는 것을 알 수 있으며, 이 생성자가 a라고 할 때 (a%10)을 하여 1의 자리수를 구한 후 (a/10)을 하는 과정을 a가 0이 될 때까지 반복하는 규칙이 있다는 것을 알 수 있습니다.
따라서 n이라는 분해합이 주어지면 1~ (n-1) 까지 1씩 증가하며 분해합을 구하고, 분해합과 일치하는 값이 나오게 되면 해당 값을 출력하고 반복문을 끝내면 됩니다. 코드는 아래와 같습니다.
소스코드
#include<iostream>
using namespace std;
int main(){
int n,value=0,cnt=0;
cin >> n;
for (int i = 1; i <=n; i++)
{
cnt = i;
value = i;
while(cnt){
value+=cnt%10;
cnt/=10;
}
if(n==value){
cout << i;
return 0;
}
}
cout << 0 ;
}
'Algorithm > Python, C++' 카테고리의 다른 글
백준 1436_영화감독 숌 [C++] (0) | 2022.06.29 |
---|---|
백준 7568_덩치 [C++] (0) | 2022.06.29 |
백준 2798_블랙잭 [C++] (0) | 2022.06.28 |
백준 10872_팩토리얼 [C++] (0) | 2022.06.26 |
백준 10870_피보나치 수 5 [C++] (0) | 2022.06.26 |
댓글