C#의 Stack 클래스는 LIFO(Last In First Out) 구조로 동작하는 컬렉션입니다. 이 글에서는 하나의 스택에 저장된 요소들의 순서를 반대로 뒤집는 방법을 알아보겠습니다.
1. 스택 생성 및 요소 추가
먼저 스택을 만들고 Push() 메서드를 사용해 요소를 추가합니다.
Stack st = new Stack();
st.Push('P');
st.Push('Q');
st.Push('R');이 시점에서 스택에는 P, Q, R이 순서대로 들어가 있으며, 가장 마지막에 넣은 R이 맨 위(top)에 위치하게 됩니다.
2. 새로운 스택으로 순서 뒤집기
요소의 순서를 반전시키기 위해 또 다른 빈 스택을 준비합니다.
Stack rev = new Stack();
그다음 원본 스택의 개수(Count)가 0이 될 때까지 Pop()으로 요소를 꺼내고, 그 값을 새 스택에 Push()로 넣어주면 됩니다.
while (st.Count != 0) {
rev.Push(st.Pop());
}스택은 LIFO 구조이므로, 기존 스택에서 꺼낸 순서(위에서부터)대로 새 스택에 쌓이면 결과적으로 전체 순서가 반전됩니다.
3. 전체 예제 코드
아래는 지금까지 설명한 내용을 모두 포함한 완성된 코드입니다.
using System;
using System.Collections;
namespace CollectionsApplication {
public class Program {
public static void Main(string[] args) {
Stack st = new Stack();
Stack rev = new Stack();
st.Push('P');
st.Push('Q');
st.Push('R');
Console.WriteLine("Current stack: ");
foreach(char c in st) {
Console.Write(c + " ");
}
Console.WriteLine();
while (st.Count != 0) {
rev.Push(st.Pop());
}
Console.WriteLine("Reversed stack: ");
foreach(char c in rev) {
Console.Write(c + " ");
}
}
}
}4. 실행 결과
Current stack: R Q P Reversed stack: P Q R
정리
이 예제에서 확인할 수 있듯이, 원래 스택에는 R Q P 순서로 출력되지만, Pop과 Push를 반복해 새 스택에 옮긴 후에는 P Q R 순서로 뒤집힌 것을 볼 수 있습니다. 이처럼 보조 스택 하나만 있으면 별도의 정렬 로직 없이 간단히 스택의 요소 순서를 반전시킬 수 있습니다.