난이도: Lv. 2
정답률: 55%
문제: https://school.programmers.co.kr/learn/courses/30/lessons/131704
알고리즘
1. 메인 스택을 n부터 1까지 1씩 감소하는 원소들로 초기화한다.
2. while문을 돌며 상자 번호를 확인한다.
2-1. 메인 스택의 마지막 상자가 현재 실어야 하는 상자와 동일한 경우
2-2. 서브 스택의 마지막 상자가 현재 실어야 하는 상자와 동일한 경우
2-3. 서브 스택의 마지막 상자 번호가 현재 실어야 하는 상자 번호보다 큰 경우
2-4. 메인 스택의 마지막 상자를 서브 스택으로 옮겨야 하는 경우
2-1과 2-2의 경우는 트럭에 실으면 되므로 정답을 증가시킨다.
2-3의 경우는 더 이상 트럭에 택배를 실을 수 없으므로 반복문을 벗어난다.
2-4의 경우는 상자를 보조 컨테이너 벨트로 옮기면 트럭에 상자를 더 실을 수 있으므로 메인 스택의 마지막 원소를 서브 스택으로 이동시킨다.
코드
function solution(order) {
let answer = 0;
const mainStack = Array.from({ length: order.length }, (v, i) => { return order.length - i });
const subStack = [];
let idx = 0;
while (idx < order.length) {
if (mainStack.length && mainStack[mainStack.length - 1] === order[idx]) {
mainStack.pop(); answer++; idx++;
} else if (subStack.length && subStack[subStack.length - 1] === order[idx]) {
subStack.pop(); answer++; idx++;
} else if (subStack.length && subStack[subStack.length - 1] > order[idx]) {
break;
} else if (mainStack.length) {
subStack.push(mainStack.pop());
}
}
return answer;
}
주저리
사실 어렵지 않은 문제인데 코드가 뜻대로 안 굴러가서 고생 좀 했다. 며칠 코딩 안 했다고 바보 된 기분이다.
'코딩테스트' 카테고리의 다른 글
[JS] 2개 이하로 다른 비트 (1) | 2024.01.30 |
---|---|
[JS] 2 x n 타일링 (1) | 2024.01.25 |
[JS] 숫자 변환하기 (0) | 2024.01.18 |
[JS] 프렌즈4블록 (0) | 2024.01.17 |
[JS] 파일명 정렬 (0) | 2024.01.17 |