-

[BOJ-2231] 분해합 본문

카테고리 없음

[BOJ-2231] 분해합

Boogallee 2018. 6. 12. 00:17



불필요한 코드를 생성해서 당연히 시간초과 + 오답이 나왔다. 


개인적으로 가장 싫어하고 어려워하는 유형의 문제이다. 차라리 조합으로 문제를 풀면 접근이라도 쉬울텐데.


여기서 배운 점은 1000000번 루프를 돌려봐야 1초안에 끝난다는 것!


기본적인 로직은


i 가 루프를 돌면서 자릿수만큼 더해주는데 이 값을 저장한 변수가 Input 값과 같으면(처음 같을 때가 당연히 최소값!) 출력, 

i가 1000000을 넘어가면 당연히 못찾은 경우로 간주!






코드:


#include<iostream>

#include<vector>

using namespace std;



int N;


//int fun(int n){

// vector<int> vec;

// int tmp = n;

// while (tmp > 0){

// int get = tmp % 10;

// vec.push_back(get);

// tmp /= 10;

// }

// for (int i = 0; i < vec.size(); i++){

// n += vec[i];

// }

// return n;

//}

int main(){

cin >> N;



for (int i = 1; i <= 1000000; i++){

int number = i;

int tc = i;


while (number > 0){

int ret = number % 10;

tc += ret;

number /= 10;

}

if (tc == N){

cout << i;

break;

}

if (i + 1 > 1000000){

cout << 0;

}


}


/*int tmp = N;

bool flg = false;

int Min = 213456789;

int a = 0;

vector<int> vec;

while (tmp > 0){

int get = tmp % 10;

vec.push_back(get);

tmp /= 10;

a++;

}

tmp = N;

for (int i = 0; i < vec.size(); i++){

tmp -= vec[i];

}

int start = 1;


for (int k = 1; k < a; k++){

start *= 10;

}

for (int i = start; i <= tmp; i++){

if (fun(i) == N){

if (Min > i){

Min = i;

}

flg = true;

}

}

if (flg){

cout << Min;

}

else{

cout << 0;

}*/





return 0;

}

Comments