펭로그

[C++] 백준 BOJ 1107 리모컨 본문

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
Comments