반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- programmers
- 범어동맛집
- 큐
- 조건문
- 앞산카페
- 압구정데이트
- 프로그래머스
- 수성구데이트
- 수성구맛집
- 대구삼겹살
- 대구고깃집
- 수성못맛집
- 브루트 포스
- 수성못삼겹살
- 오라클
- 백준
- 반복문
- C#
- 대구맛집
- SQL
- oracle
- 대구데이트
- 대구카페
- BFS
- 별찍기
- 대명동맛집
- 안지랑카페
- 들안길삼겹살
- 서울맛집
- 정렬
Archives
- Today
- Total
모든 일상
[C# / 백준] 1874번 문제 - 스택 수열 본문
728x90
반응형
문제
스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다.
1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라.
입력
첫 줄에 n (1 ≤ n ≤ 100,000)이 주어진다. 둘째 줄부터 n개의 줄에는 수열을 이루는 1이상 n이하의 정수가 하나씩 순서대로 주어진다. 물론 같은 정수가 두 번 나오는 일은 없다.
출력
입력된 수열을 만들기 위해 필요한 연산을 한 줄에 한 개씩 출력한다. push연산은 +로, pop 연산은 -로 표현하도록 한다. 불가능한 경우 NO를 출력한다.
예제 입력 및 출력
소스코드
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.Eventing.Reader;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Web;
namespace ConsoleApplication1
{
class Program
{
public static void Main(string[] args)
{
int cnt = int.Parse(Console.ReadLine());
Stack<int> s = new Stack<int>();
StringBuilder sb = new StringBuilder();
int index = 0;
int[] arr = new int[cnt];
for(int i = 0; i<cnt; i++)
{
arr[i] = int.Parse(Console.ReadLine());
}
for(int i = 1; i<=cnt; i++)
{
s.Push(i); // 오른차순으로 스택에 저장 1,2,3,4 ... 순서로
sb.Append("+" + "\n"); // 줄바꿈
while(true)
{
if (s.Count == 0) break;
if(s.Peek() == arr[index]) // 스택의 최근 값을 꺼내서 입력 값과 비교
{
sb.Append("-" + "\n");
s.Pop();
index++;
}
else break;
}
}
if(s.Count != 0) Console.WriteLine("NO");
else
{
Console.WriteLine(sb.ToString());
}
}
}
}
728x90
반응형
'코딩 공부 > C#' 카테고리의 다른 글
[C# / 백준] 1021번 문제 - 회전하는 큐 (0) | 2024.08.02 |
---|---|
[C# / 백준] 10866번 문제 덱 (0) | 2024.08.01 |
[C# / 백준] 10845번 문제 큐 (0) | 2024.08.01 |
[C# / 백준] 13300번 방 배정 (0) | 2024.06.19 |
[C# / 백준] 11328번 strfry (0) | 2024.06.18 |