백준 algorithm

백준 1107 - 리모컨

cosmohoo 2020. 6. 2. 14:19
반응형

문제 설명

 

 

=> 브루트 포스 문제입니다.

 

  • 이동할 채널 C를 정합니다.

  • C에 포함되어있는 숫자 중에 고장 난 버튼이 있는지 확인합니다.

  • 고장 난 버튼이 포함되어 있지 않다면 |C-N|을 계산해 +나 -버튼을 몇 번 눌러야 하는지를 계산합니다. 

=> 위의 방식에 따라 문제를 풀이합니다. 

 

 

 

 

 

 

=> 고장난 버튼을 확인하기 위해 broken []이라는 bool형 array를 사용하였습니다. 

=> 채널은 50만이지만, 숫자 버튼을 눌러서 이동하는 채널은 100만까지 허용하여야 합니다. (현재의 위치 100 때문)

=> 현재 위치에서 +or -를 눌러서 타겟하는 C로가는 방법

 

  • 현재 위치에서 + or -를 눌러서 타깃 C로 이동하는 방법

  • 채널 버튼을 눌러 타겟으로 이동한 다음 버튼을 눌러 이동하는 방법

=> 위의 두가지 중에 최소의 값을 찾아 원하는 값을 찾아야 합니다. 

 

<현재의 숫자가 고장난 버튼이 있는지 없는지 확인하는 함수>

int possible(int c)
{
    if( c==0)
    {
        if(broken[0]) //
        {return 0;}
        else{
            return 1;
        }
    }
    
    int len =0;
    while ( c>0 )
    {
        if(broken[c%10]){
            return 0;
        }
        len ++;
        c /=10;
    }
    return len;
}

 

 

 

 

<code>

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

bool broken[10];//false
int possible(int c)
{
    if( c==0)
    {
        if(broken[0]) //
        {return 0;}
        else{
            return 1;
        }
    }
    
    int len =0;
    while ( c>0 )
    {
        if(broken[c%10]){
            return 0;
        }
        len ++;
        c /=10;
    }
    return len;
}

int main()
{
    
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    
    int N;
    cin >> N;
    
    int m;
    cin >> m;
    for(int i=0; i<m; i++)
    {
        int x;
        cin >>x;
        broken[x]=true; //true면 고장
    }
    
    int ans = N-100;
    if(ans <0)
    {
        ans = -ans;
    }
    
    for(int i=0; i<1000000; i++)
    {
        int c=i;
        int len = possible(c);
        if(len > 0)
        {
            int press= c-N;
            if(press <0)
            {
                press = -press;
            }
            if(ans > press + len)
            {
                ans = press + len;
            }
        }
    }
    cout << ans<<'\n';
    
}

 

 

 

 

실행 화면 1
실행 화면 2

반응형