백준 1107 리모컨 C++

2022. 6. 9. 00:00알고리즘/백준

728x90

https://www.acmicpc.net/problem/1107

 

1107번: 리모컨

첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다.  둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼

www.acmicpc.net

 

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <cmath>
using namespace std;

vector<bool> mal(10);

bool check(int now) { //고장난 키가 있는지 확인하기

    string s = to_string(now);
    for (int i = 0; i < s.length(); i++) {
        if (mal[s[i] - 48]) {//0은 아스키 코드로 48
            return false;
        }
    }
    return true;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n, c;
    cin >> n >> c;
    int tmp;
    for (int i = 0; i < c; i++) {
        cin >> tmp;
        mal[tmp] = true;
    }
    string st = to_string(n);
    int minimum = abs(n - 100); //시작점이 100이닌까 100부터 +- 해주는 경우 
    for (int i = 0; i <= 1000000; i++) {
        if (check(i)) {//고장안난 키로 만든 값
            int tmp = abs(n - i) + to_string(i).length();
            minimum = min(minimum, tmp);
        }
    }
    cout << minimum << endl;


    return 0;
}

100까지 탐색을 하면서 어느 수랑 가장 차이가 작은지 비교한다. 

 

1) 100부터 시작하므로 100으로 +- 해서 절댓값 씌운 값을 저장해둔다. 

2) 1~100만까지 돌면서 숫자가 고장 안난숫자로 만들었는지 비교한다. 

3) 1),2) 숫자를 비교해서 작은 값을 minimum에 넣어준다. 

 

 

728x90

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

[백준] 1463 1로 만들기  (0) 2022.06.28
[백준 1269번] : 대칭 차집합  (0) 2022.06.22
백준 17478 재귀함수가 뭔가요?  (0) 2022.05.31
백준 17478  (0) 2022.05.31
백준 24479 C++  (0) 2022.05.28