Study/PS(Algorithm)
[C++] 백준 BOJ 1107 리모컨
노랑펭귄
2019. 5. 19. 17:22
문제링크 : https://noj.am/1107
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#include <iostream>
using namespace std;
bool unabledNum[10];
// 사용 불가능한 숫자라면 -1을 반환
// 사용 가능할 경우 자릿수를 반환
int isUnableNum(int input){
int curDigit;
int numOfDigits = 0;
do {
curDigit = input % 10;
if(unabledNum[curDigit])
return -1;
input /= 10;
numOfDigits++;
} while(input != 0);
return numOfDigits;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int targetNum;
int unabledSize;
int result = INT32_MAX;
cin >> targetNum;
cin >> unabledSize;
int input;
for(int i = 0; i < unabledSize; i++) {
cin >> input;
unabledNum[input] = true;
}
// 100부터 +/- 누르는 case
result = min(result, abs(targetNum - 100));
int curNum = -1;
// 모든 숫자를 누를 수 없는 경우 스킵
if(unabledSize == 10)
goto SKIP;
while(++curNum < 999999){
int numOfDigits = isUnableNum(curNum);
if(numOfDigits == -1)
continue;
result = min(result, numOfDigits + abs(targetNum - curNum));
}
SKIP:
cout << result;
return 0;
}
|
cs |