BOJ - 리모컨(1107)
10 Jan 2021 | BOJ 백준 알고리즘 브루트포스브루트포스로 풀 수 있는 문제입니다. 모든 채널을 돌면서 리모컨으로 가능한 채널을 찾습니다. 가능한 채널로부터 +/- 버튼을 몇 번 눌러야 하는지 계산하면서 가장 적은 누르는 수를 찾습니다. 일단 가능한 채널로 이동 후 +/- 버튼 누르는 동작을 수행한다고 생각하면 문제에 간단하게 접근할 수 있습니다.
풀이 코드
#include <stdio.h>
int N, M;
bool broken[10];
// number가 누를 수 있는 수인지 확인합니다.
int is_possible(int number) {
int ret = 0;
// 0번일 때는 별도로 처리가 필요합니다.
if (number == 0) {
if (broken[number] == 1) {
return 0;
} else {
return 1;
}
}
while (number > 0) {
if (broken[number % 10]) {
return 0;
}
number = number / 10;
ret += 1;
}
return ret;
}
int main() {
scanf("%d %d", &N, &M);
for (int i = 0; i < M; i++) {
int number;
scanf("%d", &number);
broken[number] = true;
}
// 초기 [+/-] 누르는 수 계산
int ans = 100 - N;
if (ans < 0) {
ans = ans * -1;
}
for (int ch = 0; ch <= 1000000; ch++) {
int len = is_possible(ch);
if (len > 0) {
// [+/-] 누르는 수 계산
int count = ch - N;
if (count < 0) {
count = count * -1;
}
// 가능한 숫자로 채널 이동 수 + [+/-] 누르는 수
if (ans > len + count) {
ans = len + count;
}
}
}
printf("%d", ans);
return 0;
}
Comments