[백준] 1107번 리모컨
2021년 04월 14일, 20:00
리모컨
문제풀이
완전탐색을 이용해서 풀어야하는 문제였다.
- 처음 시작은 100번에서 시작하니 최댓값은 N-100의 절대값이다.
- i부터 시작해서 1000000까지 숫자를 살펴봐야한다.
- 이유는 타겟보다 작은 숫자에서 증가시키는 방법도 있지만, 타겟보다 큰 숫자에서 오는 경우도 있기 때문이다.
- 숫자는 0,1,2,3,4,5,6,7,9로 만들 수 있는 최대 숫자로 지정했다.
- 각 숫자들이 고장나지 않은 버튼으로 만들 수 있는지 확인하고, 만들 수 있다면 고장나지 않은 버튼을 누른 횟수를 센다.
- 횟수와 N에서 리모콘으로 만들 수 있는 숫자로 N에서 빼면(N - i) 버튼 누른 횟수를 알 수 있다.
- result와 비교하면서 최솟값을 구한다.
소스코드
const log = console.log;
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
// const input = fs.readFileSync("./stdin").toString().trim().split("\n");
const N = +input[0];
const M = +input[1];
let brokens = Array(10).fill(false);
if(M !== 0){
for(const a of input[2].split(" ").map(e => +e)){
brokens[a] = true;
}
}
const counting = (number) => {
if(number === 0){
if(brokens[0]) return 0;
return 1;
}
let count = 0;
while(number > 0){
if(brokens[number % 10]) return 0;
number = parseInt(number / 10);
count++;
}
return count;
}
let result = Math.abs(N - 100);
for(let i=0 ; i<=1000000 ; i++){
const count = counting(i);
if(count > 0) result = Math.min(result, count + Math.abs(N - i));
}
log(result);