반응형
1107번: 리모컨
첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼이
www.acmicpc.net
문제 설명은 다음과 같다.
우선 간단히 생각해보자.
- 리모콘의 특정 숫자버튼이 고장난거니깐, 우선 타겟 지점에서 가장 가까운, 고장 나지 않은 숫자들의 조합으로 표현될 때까지 위 아래로 가본다.
- 고장 나지 않은 숫자들의 조합으로 등장한 첫 번째 수와 타겟 까지의 차이가 바로 + 혹은 - 버튼을 누른 횟수일 것이다.
- 그 숫자 + 고장 나지 않은 숫자들을 누른 횟수가 최소값일 것이다.
- 고장 난 키가 없다면, 그 키를 누른 횟수와 100-타겟 중 최소값이 정답일 것이다.
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
int future, howmuchOut, dap;
string s;
char err[10];
bool isPossible[1000001];
int up = 0;
int down = 0;
int ans, result;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> future;
cin >> howmuchOut;
if (howmuchOut==0){
int j = to_string(future).length();
cout << min(abs(future-100), j);
return 0;
}
for (int i=0;i<howmuchOut;i++){
cin >> err[i];
}
for (int i=0;i<=1000000;i++){
bool check = false;
string k = to_string(i);
int len = k.length();
for (int j=0;j<len;j++){
for (int w=0;w<howmuchOut;w++){
if (k[j] == err[w]){isPossible[i]=false; check=true;break;}
}
}
if (!check) isPossible[i] = true;
}
isPossible[100] = true;
int downnum = future;
int ch = 0;
while (!isPossible[downnum]) {
if (downnum==0) {
if (future!=0) ch=1;
break;
}
downnum--;
}
int leng = to_string(downnum).length();
down = min(abs(future-100), future-downnum+leng);
if (ch==1) down = abs(future-100);
int upnum = future;
while (!isPossible[upnum]) {
upnum++;
}
int leng2 = to_string(upnum).length();
up = min(abs(future-100), upnum-future+leng2);
ans = (future!=0) ? min(up, down) : up;
cout << ans;
return 0;
}
- 먼저 아래로 내려가면서 isPossible이 True일 때까지 내려간다.
- (타겟 - 그 수 + 그 수를 리모콘으로 누르는데 필요한 횟수) 와 (100 - 그 수)의 절댓값 중 최소값이 down에 들어간다.
- 위로 올라가는 것도 마찬가지로 반복한다.
- 둘 중 최소값이 답이 될 것이다!
반응형
'백준 문제풀이 > 백준 Gold' 카테고리의 다른 글
백준 1916 - 최소비용 구하기 [C/C++] (0) | 2024.08.23 |
---|---|
백준 7662 - 이중 우선순위 큐 [C/C++] (0) | 2024.06.23 |
백준 9019 - DSLR [C/C++] 백트래킹 알고리즘 (0) | 2023.11.07 |
백준 14500 - 테트로미노 [C/C++] BFS 알고리즘 (1) | 2023.11.06 |
백준 16928 - 뱀과 사다리 게임 [C/C++] BFS 알고리즘 (1) | 2023.11.05 |