문제 번호
알고리즘 분류
구현, 시뮬레이션
문제 풀이
알고리즘이 어렵진 않다. 차분하게 문제를 읽고 문제가 요구하는대로 한 단계씩 구현하면 된다.
그나마 생각해봐야 할것은 벨트의 순환이다.
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 |