안녕하세요.
오늘은 백준 1874 '스택수열' 문제를 풀이해보겠습니다.
해당 문제는 게임 개발을 할 때 정말 중요한 개념중 하나인 스택을 이용하여 해결하는 문제입니다.
저는 해당 문제를 현재 푸시 할 변수를 만들어놓고 테스트 케이스만큼 돌리는 for문 안에서 현재 푸시할 변수가 입력으로 들어온 (스택에서 구해야 할 수)수보다 작을때동안 반복되는 while문으로 stack에 현재 푸시할 변수를 1씩 올리며 Push했습니다.
그 후에 if문으로 stack의 Peek()가 입력된 수와 같고 stack의 Count가 0이 아닌지 검사하여 스택의 수를 Pop했습니다.
만약 if문을 통과하지 못했다면 else문으로 NO를 출력하고 즉시 프로그램을 종료시켰습니다.
Push하고 Pop할때마다 StringBuilder에 각각 +, - 문자열을 더하여 for문이 끝난 후 마지막에 한번에 출력해주었습니다.
이제 문제 풀이를 시작해보겠습니다.
입력 예제은 다음과 같이 주어집니다.
8
4
3
6
8
7
5
2
1
출력 예제는 다음과 같이 주어집니다.
+
+
+
+
-
-
+
+
-
+
+
-
-
-
-
-
저는 먼저 테스트케이스 n을 입력으로 받아왔습니다.
그 후에 StringBuilder sb와 Stack stack을 선언해주었습니다.
internal class Program
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine()!);
Stack<int> stack = new Stack<int>();
StringBuilder sb = new StringBuilder();
이제 테스트케이스인 n만큼 for문을 돌려줍니다.
그리고 찾을 숫자 하나를 입력받습니다.
다음줄에서 while문으로 찾으려는 숫자가 현재 푸시할 변수보다 같거나 클동안 푸시할 변수를 1씩 더해갑니다.
for (int i = 0; i < n; i++)
{
int inputNum = int.Parse(Console.ReadLine()!);
while (currentPush <= inputNum)
{
stack.Push(currentPush);
sb.AppendLine("+");
currentPush++;
}
while 문 아래 if문에서 inputNum과 stack.Peek()가 같은지를 검사합니다.
참이라면 stack에서 Pop()을 해주고, 아니라면 NO를 출력하고 프로그램을 종료시킵니다.
마지막으로, for문이 끝나면 sb를 한번에 출력합니다.
if (stack.Count > 0 && inputNum == stack.Peek())
{
int popNum = stack.Pop();
sb.AppendLine("-");
}
else
{
Console.WriteLine("NO");
return;
}
}
Console.WriteLine(sb.ToString());
}
해당 문제의 코드는 여기까지입니다.
읽어주셔서 감사합니다.
다음은 전체코드입니다.
internal class Program
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine()!);
Stack<int> stack = new Stack<int>();
StringBuilder sb = new StringBuilder();
int currentPush = 1;
for (int i = 0; i < n; i++)
{
int inputNum = int.Parse(Console.ReadLine()!);
while (currentPush <= inputNum)
{
stack.Push(currentPush);
sb.AppendLine("+");
currentPush++;
}
if (stack.Count > 0 && inputNum == stack.Peek())
{
int popNum = stack.Pop();
sb.AppendLine("-");
}
else
{
Console.WriteLine("NO");
return;
}
}
Console.WriteLine(sb.ToString());
}
}'알고리즘 풀이' 카테고리의 다른 글
| [C#] 백준 28702번 문제풀이 (0) | 2025.10.19 |
|---|---|
| [C#] 백준 2108번 문제풀이 (0) | 2025.10.18 |
| [C#] 백준 1966번 문제풀이 (0) | 2025.10.12 |
| [C#] 백준 1764번 문제풀이 (2) | 2025.08.13 |
| [C#] 백준 2920번 문제풀이 (1) | 2025.08.11 |