반응형
문제 링크 : https://www.acmicpc.net/problem/1107
풀이
우선 0~9까지 숫자 배열을 bool값으로 만들어놓고 사용할 수 있는 값은 true, 아니라면 false로 설정해둔다.
구하고자 하는 채널 번호가 100이라면, 시작 번호가 100이므로 이동하지 않아도 된다. 따라서 0을 출력하고 종료한다.
아니라면 직접 구해야한다.
우선, + 또는 -만 눌러서 이동 가능한 값은 100 - target의 절댓값으로 구할 수 있다.
다음으로 채널을 누른 뒤 + 또는 -를 눌러 이동 가능한 값은 직접 0부터 100만까지 돌며 구해야한다.
이 과정에서 사용할 수 없는 버튼이 존재하는지 check 함수를 구현하여 확인한다.
모두 사용할 수 있는 버튼으로 이루어져있다면 해당 값의 크기와 이동 횟수를 더해서 앞서 구한 값과 비교하여
최솟값을 갱신한다.
코드
#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
bool buttons[10] = { true, true, true, true, true, true, true, true, true, true };
bool check(int num){
string strNum = to_string(num);
for(int i=0; i<strNum.size(); i++){
if(buttons[strNum[i] - '0'] == false) return false;
}
return true;
}
int main(){
int target, n, ans = 0;
cin >> target >> n;
if(target == 100){
cout << 0;
return 0;
}
for(int i=0; i<n; i++){
int tmp;
cin >> tmp;
buttons[tmp] = false;
}
ans = abs(target - 100);
for(int i=0; i<=1000000; i++){
if(check(i)){
int tmp = abs(target - i) + to_string(i).size();
ans = min(ans, tmp);
}
}
cout << ans;
}
반응형
'Programming Solve > BOJ' 카테고리의 다른 글
BOJ 9375 - 패션왕 신해빈 / C++ (0) | 2022.05.01 |
---|---|
BOJ 10464 - XOR / C++ (0) | 2022.04.21 |
BOJ 1074 - Z / C++ (0) | 2022.04.21 |
BOJ 16928 - 뱀과 사다리 게임 / C++ (0) | 2022.04.18 |
BOJ 18870 - 좌표 압축 / C++ (0) | 2022.04.17 |