[백준] 1107번 리모컨

2021년 04월 14일, 20:00

리모컨

문제풀이

완전탐색을 이용해서 풀어야하는 문제였다.

  1. 처음 시작은 100번에서 시작하니 최댓값은 N-100의 절대값이다.
  2. i부터 시작해서 1000000까지 숫자를 살펴봐야한다.
    1. 이유는 타겟보다 작은 숫자에서 증가시키는 방법도 있지만, 타겟보다 큰 숫자에서 오는 경우도 있기 때문이다.
    2. 숫자는 0,1,2,3,4,5,6,7,9로 만들 수 있는 최대 숫자로 지정했다.
  3. 각 숫자들이 고장나지 않은 버튼으로 만들 수 있는지 확인하고, 만들 수 있다면 고장나지 않은 버튼을 누른 횟수를 센다.
  4. 횟수와 N에서 리모콘으로 만들 수 있는 숫자로 N에서 빼면(N - i) 버튼 누른 횟수를 알 수 있다.
  5. 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);