일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 택시 기하학
- 우선순위 큐
- 영어
- 라자냐
- T자형 인재
- 닌텐도 스위치 2
- 시작
- 스택
- 코딩테스트
- 카니발대학교 공대강국
- VRoid Studio
- i자형 인재
- 자료구조
- blender
- 그래픽 디자인
- unity engine
- 큐
- windows 12
- 브루트포스 알고리즘
- 다이나믹프로그래밍
- 배열 리스트
- 그리디 알고리즘
- c#
- 잴다의 전설 티어스 오브 더 킹덤
- 마인크래프트
- 빅오 표기법
- 이진 탐색
- vrm posing desktop
- 2025 대한민국 채용박람회
- VPS
Archives
- Today
- Total
WalkerJei's Lifelog
백준알고리즘 10845번 큐 C# 본문
세부 정보
- 사이트: 백준알고리즘
- 번호: 10845
- 문제명: 큐
- 언어: C#
- 분류: 자료 구조, 큐
- 비고:
문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
풀이
문자열 변수에 특정한 문자열이 포함되어 있는 지 확인할 때는 Contains()를 사용하면 된다.
큐는 선입선출 방식이므로 마지막에 입력한 수를 따로 저장해서 맨 뒤의 정수를 구할 수 있다.
using System.Text;
class CommandQueue
{
public static void Main(string[] args)
{
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
// 결과를 저장할 곳
StringBuilder sb = new StringBuilder();
// 입력한 것을 저장할 큐
Queue<int> queue = new Queue<int>();
// 입력할 명령의 개수 입력
int command = Convert.ToInt32(sr.ReadLine());
// push 명령 입력 시 뒤의 정수가 들어갈 곳
int lastNum = 0;
// 명령의 개수가 0으로 줄어들 때까지 반복
while (command-- > 0)
{
// 명령어 입력
string input = sr.ReadLine();
// push 입력 시
if (input.Contains("push"))
{
// 뒤따라온 수를 추출해 저장한다.
lastNum = Convert.ToInt32(input.Split()[1]);
// 뒤따라온 수를 큐에 삽입한다.
queue.Enqueue(lastNum);
}
// 큐의 맨 앞 정수를 빼고 그 수를 출력한다. 큐가 비었다면 -1 출력
else if (input == "pop")
sb.AppendLine(queue.Count > 0 ? queue.Dequeue().ToString() : "-1");
// 큐에 저장된 정수 개수 출력
else if (input == "size")
sb.AppendLine(queue.Count.ToString());
// 큐가 비어 있다면 1, 아니면 0 출력
else if (input == "empty")
sb.AppendLine(queue.Count == 0 ? "1" : "0");
// 큐의 맨 앞의 정수를 확인하며 없으면 -1 출력
else if (input == "front")
sb.AppendLine(queue.Count > 0 ? queue.Peek().ToString() : "-1");
// 큐의 맨 뒤의 정수를 확인하며 없으면 -1 출력
else if (input == "back")
sb.AppendLine(queue.Count > 0 ? lastNum.ToString() : "-1");
}
// 명령 실행 결과 출력
sw.WriteLine(sb);
sr.Close();
sw.Close();
}
}
후기
2025.03.29 - [소프트웨어 개발/코딩테스트(기성 문제)] - 백준알고리즘 18258번 큐 2 C#
이전에 한 번 풀어본 적 있는 문제였는데 기억이 잠자고 있었는지 어떻게 풀어야 할 지 기억이 나지 않았다. 아무래도 복습을 할 필요성이 있었다. 또한 언젠가는 C++로도 풀어볼 생각도 있다.
참고로 이 문제는 시간 제한이 이전에 푼 문제보다 절반인 0.5초로 되어 있었다.
'소프트웨어 개발 > 코딩테스트(기성 문제)' 카테고리의 다른 글
백준알고리즘 2720번 세탁소 사장 동혁 C# (1) | 2025.05.11 |
---|---|
백준알고리즘 1436번 영화감독 숌 C# (0) | 2025.05.10 |
백준알고리즘 10825번 국영수 C# (0) | 2025.05.09 |
백준알고리즘 10987번 모음의 개수 C# (0) | 2025.05.07 |
백준알고리즘 31403번 A + B - C C# (0) | 2025.05.07 |