[JS][백준]20055_컨베이어 벨트 위의 로봇
Algorithm/BaeKJoon

[JS][백준]20055_컨베이어 벨트 위의 로봇

문제 번호

 

20055번: 컨베이어 벨트 위의 로봇

길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부

www.acmicpc.net

 

 

알고리즘 분류

구현, 시뮬레이션

 

문제 풀이

 알고리즘이 어렵진 않다. 차분하게 문제를 읽고 문제가 요구하는대로 한 단계씩 구현하면 된다.

그나마 생각해봐야 할것은 벨트의 순환이다.

1차원 배열을 1번 인덱스부터 사용하였다. 벨트가 움직이는것은 for문을 사용하여 i=N 일때부터 i=1 일때 까지 진행하였다. belt[i] = belt[i-1].

 단 i 가 2N 일 때는 2N번째 벨트에 있는 정보를 temp 라는 변수에 옮겨두었다. 왜냐하면 i가 1일때의 벨트상태는 i가 2N일때의 벨트상태를 받아야 하기 때문이다.

 belt 배열의 robot 프로퍼티는 false일땐 해당 칸에 로봇이 없음을 뜻하고 true는 해당칸에 로봇이 있음을 뜻한다.

 

전체코드

const fs = require('fs');
const input = fs.readFileSync('컨베이어 벨트 위의 로봇/input.txt').toString().split('\n');
const NK = input.shift().split(' ');
const N = NK.shift();
let K = NK.shift();
let answer = 1;
const durability = input.shift().split(' ');
let belt = new Array(2 * N + 1);

for (let i = 1; i <= 2 * N; i++) {
  belt[i] = {
    'robot': false,
    'durability': durability[i - 1]
  };
}

while (1) {
  // step 1.
  let temp;
  for (let i = 2 * N; i >= 1; i--) {
    if (i === 2 * N) {
      temp = belt[2 * N];
      belt[i] = belt[i - 1];
    }
    else if (i === 1)
      belt[i] = temp;
    else
      belt[i] = belt[i - 1];
  }
  // step 2.
  if (belt[N].robot === true)
    belt[N].robot = false;
  for (let i = N; i >= 1; i--) {
    if (i !== 1) {
      if (belt[i].robot === false && belt[i].durability >= 1) {
        if (belt[i - 1].robot === true) {
          belt[i - 1].robot = false;
          belt[i].robot = true;
          belt[i].durability--;
          if (belt[i].durability === 0)
            K--;
          if (K === 0) {
            console.log(answer);
            return answer;
          }
        }
      }
    }
  }
  if (belt[N].robot === true)
    belt[N].robot = false;
  // step 3.
  if (belt[1].durability > 0) {
    belt[1].robot = true;
    belt[1].durability--;
    if (belt[1].durability === 0)
      K--;
    if (K === 0) {
      console.log(answer);
      return answer;
    }
  }

  answer++;
}

 

특이사항

 백준은 입력받는게 너무 불편하다.........

 

'Algorithm > BaeKJoon' 카테고리의 다른 글

[JS][백준]14502_연구소  (0) 2021.09.09
[JS][백준]21608_상어 초등학교  (0) 2021.09.09
[JS][백준]11650_좌표 정렬하기  (1) 2021.08.24
[JS][백준]2108_통계학  (0) 2021.08.24
[JS][백준]1260_DFS와 BFS  (0) 2021.08.24