✏️ 문제


그림처럼 열차가 들어갔다 나올 수 있는 플랫폼이 있다.
열차가 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. 기차는 [1, 2, 3] 혹은 [3, 2, 1]이 아닐 경우 나갈 수 없다.
  2. 먼저 train이 순서대로 나갈 수 있는지 확인하는 for문을 작성해준다.
  3. 새로운 stacknum을 만들어주고, while문을 이용하여 stack 에 열차를 순서대로 넣어준다.
    여기서 while문을 해석하자면, stack의 length가 0일 경우 stacknum을 push해준다는 뜻임
  4. 이렇게 되면 stack 의 length는 0부터 시작하니 결국 stack = [1, 2, 3] 이 된다.
  5. 만약(if) stack의 마지막 요소가(length - 1) train[i] 와 같을 경우 stack 의 마지막 요소를 지워준다. 같지 않을 경우에는 false를 반환한다.
profile
#UXUI #코린이

0개의 댓글