본문 바로가기

Coding/백준

2231번 분해합

 브루트 포스 문제.

 

 값을 입력받으면 몇 자리수인지 확인하고 그 자리수만큼 숫자를 채우고 1씩 증가시켜가며 답을 구했다.

   ex) 216

   -> 100 (100+1+0+0)

   -> 101 (101+1+0+1)

   -> 102 (102+1+0+2)

   ....

   ..

   .

   -> 198 (198+1+9+8=216)

 

 1. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
using namespace std;
 
string str;
long size;
int Target;
 
void solved(int ans, int sum, int cnt){
    
    if((sum+ans)==Target){
        cout << ans << endl;
        exit(0);
    }
    
    if(cnt>sizereturn;
    if(ans==0return;
    
    for(int i=0;i<=9;i++){
        solved(ans*10+i,sum+i,cnt+1);
    }
}
 
int main(){
    cin >> str;
    Target=atoi(str.c_str());
    size=str.size();
    
    for(int i=1;i<=9;i++){
        solved(i,i,1);
    }
    
    cout << 0 << endl;
}
cs

 

 2. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
using namespace std;
 
int Target;
 
void solved(int key){
    int sum=key;
    int ans=key;
    
    while(key>0){
        sum+=key%10;
        key/=10;
    }
    
    if(sum==Target){
        cout << ans << endl;
        exit(0);
    }
}
 
int main(){
    cin >> Target;
    
    for(int i=1;i<=Target;i++){
        solved(i);
    }
    
    cout << 0 << endl;
}
cs

'Coding > 백준' 카테고리의 다른 글

10871번 X보다 작은 수  (0) 2020.03.31
9498번 시험 성적  (0) 2020.03.31
5585번 거스름돈  (0) 2020.03.30
1978번 소수 찾기  (0) 2020.03.23
1912번 연속합  (0) 2020.03.22