백준(boj)1107 - 리모컨

업데이트:

문제 링크 - https://www.acmicpc.net/problem/1107

👀문제이해 및 풀이방법

브루트 포스 문제였는데 너무 어려웠다 하루종일 고민한것 같은데 내 머리속에서 나온 수단과 방법으로 해봐도 계속 WA가 떠서
결국 찾아보고 풀었다..
각 자리수마다 가장가까운 수를 구해도 보았고 앞에서부터 구해나가서 작다면 가장 큰 수 , 크다면 가장 작은 수 등을 비교해서 가장 가까운 수를 구해보았다
하지만 모두 예외가 있었고 답은 그냥 가능한 모든 수를 검사해서 가장 가까운 수를 찾아내는 것이였다 ..
코드는 쉽게 짜는 문제인데 아이디어가 떠오르기 힘들었다고 생각한다

📝코드

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
class remote{
private:
    vector<int> button;
    int N;
public:
    remote(){
        std::cin >>N;
        button.resize(10,0);
        set_val();
    }   
    void set_val(){
        int n,tmp;
        std::cin >> n;
        for(int i=0;i<n;i++){
            std::cin >> tmp;
            button[tmp]++;
        }
    }
    void find_sol(){
        int m=abs(N-100);
        int len,c;
        bool flag;
        for(int i=0;i<1000000;i++){
            flag=true;
            c=i;
            len=1;
            while(1){
                if(button[c%10])
                    flag=false;
                if(c/=10)
                    len++;
                else
                    break;
            }
            if(flag)
                m = min((abs(N-i))+len,m);
        }
        std::cout << m << '\n';
    }   
};

int main(){
    cin.tie(NULL);cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    remote rm;
    rm.find_sol();

    return 0;
}

image

댓글남기기