스택(Stack)은 LIFO(Last In First Out, 후입선출) 원리로 동작하는 자료구조입니다. 즉, 가장 나중에 삽입된 요소가 가장 먼저 제거됩니다. 따라서 첫 번째 스택의 모든 요소를 다른 스택으로 옮기려면, pop() 메서드로 첫 번째 스택에서 요소를 하나씩 꺼낸 뒤, push() 메서드로 두 번째 스택에 순서대로 삽입해야 합니다.
예제 코드
아래 예제는 for 루프 조건식에서 배열의 length 속성을 활용하여, 첫 번째 스택이 빌 때까지 반복하면서 모든 요소를 두 번째 스택으로 이동시키는 방법을 보여줍니다.
var myFirstStack = [10, 20, 30, 40, 50, 60, 70];
var mySecondStack = [];
for (; myFirstStack.length; ) {
mySecondStack.push(myFirstStack.pop());
}
console.log("첫 번째 스택에서 모든 요소를 꺼낸 후 =");
console.log(myFirstStack);
console.log("두 번째 스택에 모든 요소를 삽입한 후 =");
console.log(mySecondStack);위 프로그램을 실행하려면 다음 명령어를 사용합니다.
node fileName.js
여기서는 파일 이름이 demo189.js라고 가정합니다.
실행 결과
위 프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
PS C:\Users\Amit\javascript-code> node demo189.js 첫 번째 스택에서 모든 요소를 꺼낸 후 = [] 두 번째 스택에 모든 요소를 삽입한 후 = [ 70, 60, 50, 40, 30, 20, 10 ]
코드 설명
루프의 조건식인 myFirstStack.length는 배열이 비어 있으면 0(falsy 값)이 되어 반복이 종료됩니다. 각 반복마다 pop()이 첫 번째 스택의 마지막 요소(70부터 시작)를 제거하고, 그 값을 곧바로 push()로 두 번째 스택에 추가합니다.
그 결과, 첫 번째 스택은 완전히 비게 되고([]), 두 번째 스택에는 [70, 60, 50, 40, 30, 20, 10]처럼 원래 순서가 뒤집힌 형태로 요소가 저장됩니다. 이는 스택의 LIFO 특성 때문이며, 만약 원래 순서를 유지하고 싶다면 세 번째 보조 스택을 사용하거나 두 번째 스택의 요소를 다시 한 번 역순으로 처리해야 합니다.