🖥️ CS/Baekjoon Algorithms

#2231번 분해합 (c++)

한국의 메타몽 2020. 3. 1. 14:24
#include <iostream>
using namespace std;

int sep_plus(int a){
    
    int ans = 0;
    int i = 0;

    for(i=(a>>1); i<a; i++)
    {
        ans=(i/1000000)+((i/100000)%10)+((i/10000)%10)+((i/1000)%10)+((i/100)%10)+((i/10)%10)+i%10+i;
        if(ans==a){
            cout << i;
            break;}
        if(i==a-1&&ans!=a) cout << "0";
    }    
    return 0;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int num = 0;
    cin >> num;
    sep_plus(num);

    return 0;
}

맨 처음에는 숫자의 구간 별로 if-else if를 세울까 했지만, 그건 너무 무식하고 비효율적이게 보였다.

어떤 수든 문제에 부합할 공통적인 공식을 하나 세운 뒤, 

숫자의 분해합을 시작할 부분은 '숫자>>1', 즉, 절반 값에 해당하는 부분부터 시작을 진행했다. 

 

이 문제 역시 한 두번 정도 틀렸는데, 문제를 똑바로 안읽어봐서 그렇다. 

혹시 테스트 케이스를 통과했는데 틀린 사람은 문제를 다시 한 번 똑바로 읽어보자. 

 

 

1. N=1일 경우 어떤 식의 답이 나오는지

2. 분해합이 존재하지 않을 경우 '0'이 잘 출력되는지

 

이 두 가지 조건을 충족하는지 생각해봐야한다.  

'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글

#1018번 체스판 다시 칠하기 (c++)  (0) 2020.03.01
#1568번 덩치 (c++)  (0) 2020.03.01
#2789번 블랙잭 (c++)  (0) 2020.03.01
#1002번 터렛 (c++)  (0) 2020.02.26
#11729번 하노이 탑 이동순서 (c++)  (0) 2020.02.25