문제
풀이
정답이 될 수 있는 가장 작은 숫자는 input - input의자릿수 * 9 즉 n의 자리가 모두 9가 될때 최소가 된다. 그리고 가장 큰 수는 input 자체이다.
step1. input의 자릿수 구하기
나는 다음과 같은 방법으로 자릿수와 가장큰 자릿수 (ex- 333d의 가장 큰 자릿수는 100) 를 구했다.
int i(가장 큰 자릿수) = 1000000
int num(자릿 수) = 7
while(input/i==0){ //input / i가 0 이 되었다는 말은 i가 여전히 큼을 의미한다.
i=i/10;
num = num-1;
}
step2. 가장 작은 후보부터 가장 큰 후보까지 반복문을 돌리며 각 그 수와 각자리수의 합이 input과 동일한 수가 됨을 확인하여 본다.
int result = input - num * 9;
int result2 = result; //input과 비교할 값이다.
int result3; //중간에 계산을 위해 필요한 값이다.
while(result2!=input && result <= input){
result2 = result;
result3 = result;
for(result3 = result; result3 ; result3/=10){
result2 += result3%10;
}
result ++;
}
코드
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int input;
int num=7 ;
cin >> input;
int i=1000000;
int i2;
while (input/i==0) {
i = i / 10;
num--;
}
int result = input - num * 9;
int result2 = result;
int result3;
while (result2 != input && result <= input) {
result2 = result;
for (result3 = result; result3; result3 /= 10)
result2 += result3 % 10;
result++;
}
if (result-1 == input)
cout << 0;
else
cout << result-1;
return 0;
}
'알고리즘 > 브루트포스' 카테고리의 다른 글
백준1476 날짜 계산 (0) | 2019.02.06 |
---|---|
백준알고리즘-2309번 일곱난쟁이 브루트포스 (0) | 2018.11.07 |