백준 1107 리모컨 / C++

이유참치·2025년 7월 31일

백준

목록 보기
10/248

문제 :

풀이 point

1 ~ 1,000,000 부터 값을 검증해나간다. 만약 고장난 버튼이 포함된 숫자라면 pass해준다. 그중 가장 차이가 작은 값을 골라낸 후 +버튼이나 -버튼을 얼마나 눌러야하는지 계산한다.

코드

#include <iostream>
#include <algorithm>
#include <cmath>

int arr[10];

int main() {
    int N, M;
    std::cin >> N >> M;

    for (int i{0}; i < M; ++i) {
        std::cin >> arr[i];
    }

    int minPress = std::abs(N - 100); // +,- 버튼만 사용할 경우

    for (int i{0}; i <= 1000000; ++i) { // 0부터 1000000까지 탐색
        bool flag = false;
        for (int j{0}; j < M; ++j) {
            int x = i;
            do {
                if (x % 10 == arr[j]) { // 고장난 숫자가 포함되면 건너뛰기
                    flag = true;
                    break;
                }
                x /= 10;
            } while (x != 0);
            if (flag) break;
        }
        if (!flag) {
            std::string s = std::to_string(i);
            minPress = std::min(minPress, (int)s.size() + std::abs(N - i));
        }
    }

    std::cout << minPress << "\n";
    return 0;
}

2025-02-26T07:51:21.241Z

profile
임아리 - 대학생

0개의 댓글