[백준 10811번 문제] 바구니 뒤집기 | 알고리즘 설명 & 문제 풀이 with 자바스크립트(Javascript)

Re_Go·2024년 1월 9일
0

코딩테스트연습

목록 보기
75/106
post-thumbnail

1. 첫번째 문제 풀이(2024-01-09)

이 문제의 경우 문제를 이해하는데 꽤 소요가 걸린 문제였지만, 이해를 하고 나니 한결 편해진 문제였습니다. 또 이 문제에서 spliceslice, 구조 분해 할당을 사용하여 배열을 재조정 하는 동안 이 두 메서드의 차이에 대해 다시 한 번 복습할 수 있었던 시간이기도 했고요.

또 해당 문제에 대해서 연속된 숫자 배열을 생성하는 방법을 기존의 for문이 아니라 map 메서드를 활용해서 풀면서 그 메서드 이용법 또한 익숙해지려 했던 시간이기도 했습니다.

const fs = require('fs'); 
const input = fs.readFileSync("/dev/stdin").toString().trim().split('\n');
const [count, line] = input[0].split(' ').map(Number);
let baskets = Array(count).fill(1).map((v, i) => v + i); // count길이 만큼의 배열을 생성하여 1로 채운 후, map을 돌면서 요소마다 인덱스 + 1한 값을 반환

for (let i = 1; i <= line; i++) {
    let [start, end] = input[i].split(' ').map(Number);// 입력의 두번째 줄 부터의 요소를 split후 map으로 숫자 타입 변환 후 각각 start와 end에 할당
    let reversedPart = baskets.slice(start - 1, end).reverse(); // 만들어놓은 baskets 배열에 slice 메서드를 이용해 start - 1 (주어진 숫자는 1부터 시작하지만 배열은 0부터 시작하기 때문)부터 end까지 자르고 뒤집은 후 변수에 반환 
    baskets.splice(start - 1, end - start + 1, ...reversedPart); // splice 메서드로 시작 인덱스부터 자를 개수 (만약 start가 2이고 end가 5면 실제 1,2,3,4번째 인덱스 네 개를 잘라야 하므로 5 - 2 + 1를 해야 4를 얻을 수 있음.), 그 안을 대체할 reversedPart 레스트 연산자를 세번째 매개변수로 입력
}

// 결과 출력
console.log(baskets.join(' ')); // 출력은 문자열이여야 하므로 join으로 합친 후 출력.
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글