문제 & 링크
https://www.acmicpc.net/problem/1107
풀이
1. 리모컨은 0 - 9까지 10개의 버튼을 가지고 있기에 길이가 10인 bool 자료형의 배열을 만들고, 입력받은 버튼을 true로 설정한다.
2. 현재 채널이 100이기에 +, - 버튼만으로 원하는 채널에 도달할 때 누르는 횟수를 저장한다. 이때 음수값을 가질 수도 있으니 abs() 함수를 이용하여 양수로 저장한다.
3. 이동하고자 하는 채널이 최대 500,000번 이기에 1,000,000번 채널에서 - 버튼을 누르는 경우도 생각하여 반복문을 수행한다.
4. 해당 채널의 번호가 부서진 버튼을 포함하고 있는지 check 함수를 통해 확인한다. 이때 채널 번호를 string 형태로 바꾸고 한 글자 단위로 확인한다.
5. 만약 채널 번호를 누를 수 있는 경우(check 함수를 통과한 경우), 해당 채널의 자릿수 + N 까지의 거리(+, - 버튼으로 이동하는 거리)를 수행하고 최솟값을 구해준다.
코드
#include <iostream>
#include <string>
using namespace std;
bool broken[10] = { false };
bool check(int num) {
string S = to_string(num);
for (int i = 0; i < S.length(); i++) {
if (broken[S[i] - '0']) return false;
}
return true;
}
int main() {
int N, M;
int num;
cin >> N;
cin >> M;
for (int i = 0; i < M; i++) {
cin >> num;
broken[num] = true;
}
int min = abs(N - 100);
for (int i = 0; i <= 1000000; i++) {
if (check(i)) {
int tmp = to_string(i).length() + abs(N - i);
if (min > tmp) min = tmp;
}
}
cout << min;
}
'Koala - 15기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/Python] 2164번: 카드2 (0) | 2024.08.04 |
---|---|
[백준/C++] 9252번: LCS 2 (0) | 2024.08.04 |
[백준/python] 10773 : 제로 (0) | 2024.08.04 |
[백준/C++] 1012번 : 유기농 배추 (0) | 2024.08.04 |
[Python3/백준]15903번 : 카드 합체 놀이 (0) | 2024.08.02 |