#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 |