반응형
SMALL
문제

문제 풀이
using System;
using System.Collections.Generic;
namespace BOJ
{
class Program
{
static void Main()
{
int N = 8; // 수열의 최대 인덱스 입력
int[] numlist = { 4, 3, 6, 8, 7, 5, 2, 1 }; // 수열 인덱스의 요소 할당
Stack<int> stacks = new Stack<int>(); //수열과 비교할 스택 리스트 생성
List<string> pmList = new List<string>(); // 수열과 스택을 비교할때마다 넣어줄 "+" "-" 들을 담을문자열 리스트
int temp = 0; // 수열의 인덱스 초기화
for (int i = 1; i <= N; i++) // i 는 1부터 8까지
{
stacks.Push(i);
pmList.Add("+");
if (numlist[temp] == i) // 수열의 0번째 요소와 같아질때 까지 Push
{
stacks.Pop(); //수열의 0번째 요소와 같아지면 Pop
pmList.Add("-");
temp++; //다음에 비교할 수열의 인덱스 ++
if (stacks.Count != 0) //만약 스택요소의 수가 0이 아니라면
{
while (numlist[temp] == stacks.Peek()) // 수열의 0번째 요소 와 스택의 최 상단 요소가 같아질때까지 pop
{
if (stacks.Peek() != numlist[temp]) break; //만약 스택의 최상단 요소가 수열요소와과 같지 않다면 break;
else
{
stacks.Pop();
pmList.Add("-");
if (temp < N) //만약 temp가 수열의 최대 인덱스보다 작다면 ++ 아니라몀ㄴ break;
temp++;
if (temp == N) break;
}
}
}
}
}
if (stacks.Count == 0) //stack에 요소가 남아있다면 NO 남아있지 않다면 +- 리스트 요소들을 출력
{
foreach (string pm in pmList)
Console.WriteLine(pm);
}
else
Console.WriteLine("NO");
}
}
}
뭔가 굉장히 지저분하게 풀었다;;
좀더 깔끔하게 풀수 있는 방법을 연구해야겠다.
for문과 if문이 계속 섞이니 들여쓰기가 계속 되어 점점더 지저분해 진듯하다.
반응형
LIST
'Algorithm > BOJ' 카테고리의 다른 글
| [BOJ] 1439 뒤집기 C# 풀이 (1) | 2023.01.20 |
|---|---|
| [BOJ] 5585 거스름돈 C# 풀이 (0) | 2023.01.20 |
| [BOJ] 1764 듣보잡 C# 알고리즘 풀이 (0) | 2023.01.20 |
| [프로그래머스] 완주하지 못한 선수 C# 풀이 (1) | 2023.01.19 |
| [BOJ] 2979 트럭 주차 C# 풀이 (0) | 2023.01.19 |