백준 2231_분해합 [C++]
본문 바로가기
Algorithm/Python, C++

백준 2231_분해합 [C++]

by liveloper jay 2022. 6. 28.

문제

 

 

풀이

 이 문제는 어떤 임의의 수 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

댓글