-
백준 1107 - 리모컨백준 algorithm 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'; }
반응형'백준 algorithm' 카테고리의 다른 글
백준 1748 - 수 이어 쓰기 1 (0) 2020.06.02 😭백준 6064 - 카잉 달력 (0) 2020.06.02 백준 1476 - 날짜 계산 (0) 2020.06.01 백준 3085 - 사탕 게임 (0) 2020.05.31 백준 2309 - 일곱난쟁이 (0) 2020.05.16 -