https://www.acmicpc.net/problem/12789
Stack을 이용하여 푸는 문제이다.
고려할 점은, 줄 순서로 들어간 경우에도 대기열을 검사해주어야 한다는 점이다.
또, 생각 없이 stack.Count로 for문을 만들어 오답이 많이 났다..
using System;
using System.IO;
namespace B12789
{
class Program
{
static void Main()
{
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
int n = int.Parse(sr.ReadLine());
int[] students = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
Stack<int> stack = new Stack<int>();
int index = 1;
for(int i = 0; i < n; i++)
{
if (students[i] == index)
{
index++; //번호 순서가 맞음
if (stack.Count > 0) //중간 검사
{
while(stack.Count > 0)
{
int pop = stack.Pop();
if (pop == index) index++;
else
{
stack.Push(pop);
break;
}
}
}
}
else stack.Push(students[i]); //아니면 대기열로
}
bool result = true;
if(stack.Count > 0) //줄이 사라지고 대기열만 남았을 경우
{
while (stack.Count > 0)
{
int pop = stack.Pop();
if (pop == index) index++;
else
{
result = false;
break;
}
}
}
if (result) sw.Write("Nice");
else sw.Write("Sad");
sr.Close();
sw.Flush();
sw.Close();
}
}
}
'알고리즘 > 백준 BOJ' 카테고리의 다른 글
[ BOJ/C# ] 15829 Hashing (1) | 2023.11.03 |
---|---|
[ BOJ/C# ] 1110 더하기 사이클 (1) | 2023.11.02 |
[ BOJ/C# ] 2193 이친수 (0) | 2023.10.31 |
[ BOJ/C# ] 1316 그룹 단어 체커 (1) | 2023.10.30 |
[ BOJ/C# ] 4949 균형잡힌 세상 (0) | 2023.10.29 |