
const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'Wiki\\input.txt';
const inputs = fs.readFileSync(path).toString().trim().split('\n');
const [n, m] = inputs[0].split(' ').map(Number);
let baskets = Array.from({ length: n }).map((_, idx) => idx);
for (const input of inputs.slice(1)) {
const [i, j] = input.split(' ').map((it) => +it - 1);
baskets = [
...baskets.slice(0, i),
...baskets.slice(i, j + 1).reverse(),
...baskets.slice(j + 1),
];
}
console.log(...baskets.map((it) => it + 1));
⏰ 소요한 시간 : -
i부터 j까지 바구니를 뒤집어야 한다. 배열 인덱스는 0부터 작용하므로 i와 j도 1씩 빼주었다.
JS의 slice 메서드는 어떤 배열의 시작부터 끝까지에 대한 얕은 복사본을 배열객체로 반환해준다. 참고로 목표값의 직전까지 반환하기 때문에 0부터 5까지 복사하고 싶으면 0, 6을 매개변수로 전달해줘야 한다. 따라서 0부터 i까지, i부터 j까지를 뒤집은 즉 reverse를 수행한 배열, j+1부터 끝까지 를 복사하고 이를 모두 스프레드 연산자로 풀어서 하나의 배열을 만들어준다.