그림처럼 열차가 들어갔다 나올 수 있는 플랫폼이 있다.
열차가 1번부터 3번까지 순서대로 들어온다고 했을 때, 입력 순서대로 나갈 수 있는지 판단하는 프로그램을 작성하시오. 입력은 차량 순서가 적혀있는 배열이며, 가능 여부에 따라 true/false를 반환한다.
입력값
[1, 2, 3] [3, 2, 1] [3, 1, 2]
출력값
#1 true #2 true #3 false
function answer(train) {
// stack은 배열과 동일하니까 배열로 생성
let stack = [];
let num = 0; // 열차 넣을 공간
// train이 순서대로 나갈 수 있는지 확인
for (let i = 0; i < train.length; i++) {
while(stack.length === 0 || stack[stack.length - 1] < train[i]) {
stack.push(++num) // 열차를 넣어줌
}
// 확인하기
if (stack[stack.length - 1] === train[i]) {
stack.pop();
} else {
return false;
}
}
return true
}
- 기차는 [1, 2, 3] 혹은 [3, 2, 1]이 아닐 경우 나갈 수 없다.
- 먼저 train이 순서대로 나갈 수 있는지 확인하는 for문을 작성해준다.
- 새로운
stack
과num
을 만들어주고, while문을 이용하여stack
에 열차를 순서대로 넣어준다.
여기서 while문을 해석하자면, stack의 length가 0일 경우stack
에num
을 push해준다는 뜻임- 이렇게 되면
stack
의 length는 0부터 시작하니 결국stack = [1, 2, 3]
이 된다.- 만약(if)
stack
의 마지막 요소가(length - 1)train[i]
와 같을 경우stack
의 마지막 요소를 지워준다. 같지 않을 경우에는 false를 반환한다.