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

#include <iostream>
int N, tmp, sum = 0;
int main(int argc, char **argv){ // 부르트포스 알고리즘
    scanf("%d",&N);
    
    for(int i=1; i<=N; i++){
        tmp = i;
        sum += i; // 2의 생성자는 1 (1+1)
        while(tmp > 0){
            sum += tmp % 10;
            tmp /= 10;
            if(tmp == 0 && sum == N){
                printf("%d", i);
                return 0;
            }
        }
        sum = 0;
    }

    printf("0");

    return 0;
}

총 4번의 시도 끝에 맞춘 문제.
풀리지 않을 때는 코드를 보기보다 반례를 생각해보고, 정말 모르겠으면 질문 검색란에 있는 질문에서 반례를 찾아보고 입력을 해보는 편이다.

  1. 2의 생성자는 1이다. 1 + 1 = 2

  2. 생성자가 없으면 0을 출력시킨다.

  3. 86의 생성자는 78이 아니라 0이다. 78 + 8 = 86 이 되어 값을 78로 출력하였지만 78 + 8 + 7 을 계산해야한다.

좋은 웹페이지 즐겨찾기