Algorithm

[백준] 10845번 : 큐 (C++)

남 희 2021. 12. 3. 17:12
 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

📚 문제 한 줄 요약

큐를 구현하고 문제에서 제시한 규칙으로 입력을 처리해 큐를 다루는 문제

 

📚 풀이

C언어라면 Linked List를 이용해서 큐의 구조와 함수를 구현해야 할 것이다.

하지만, C++ 언어를 사용한다면 직접 Queue(큐)를 구현하는 것보다 <queue> 라이브러리를 사용하는 것이 효율적이다.

여기서는 큐의 구조에 대해 다루기보다 라이브러리 함수를 이해하는 것을 위주로 풀이한다.

문제에서 주어진 입력 처리와 C++ <queue> 내장 함수에 차이가 있기 때문에 함수 구조와 사용 방법을 이해해야 풀 수 있기 때문이다.

 

1. Queue 변수 선언

	queue<T> q; // 만약 int값을 저장하기를 원한다면, queue<int> q;

위와 같이 T에 원하는 타입으로 알맞게 맞춰 작성하면 queue 변수가 선언된다.

 

2. <queue> 라이브러리 함수

(1) push : 데이터를 추가할 때 사용

	q.push(element); // void push(T element);

큐에 추가하고 싶은 데이터를 element 인자에 넣으면 q에 데이터가 저장된다.

문제에서도 반환 값을 요구하지 않았기 때문에 함수 외 추가로 신경 쓸 부분은 없다.

 

(2) pop : front 데이터를 삭제

	q.pop() // void pop()

q에 저장된 데이터를 삭제한다.

이 함수 작성 시 주의해야 하는데

pop 함수는 반환값을 가지지 않으며,

비어있을 때 pop 함수가 동작하면 허용되지 않은 범위를 건드려서 size 반환 시 옳지 않은 값을 반환한다.

그래서 비어있을 때 동작하지 못하도록 해야 한다.

 

(3) front : 제일 최상위 데이터(가장 먼저 넣은 데이터) 반환

	q.front(); // T front()

가장 먼저 넣은 데이터를 반환하는 함수이다.

이 함수 역시 비어있을 때 동작하지 않도록 주의해야 한다.

비어있을 때 동작하면, run-time error가 발생한다.

이 말은 비어있을 때 동작하면 아무 값도 반환하지 않고 프로그램이 종료된다는 뜻이다.

원하는 출력을 얻으려면 함수만 사용해서는 안 된다.

 

(4) back : 제일 마지막 데이터(가장 마지막에 넣은 데이터) 반환

	q.back(); // T back()

가장 마지막에 넣은 데이터를 반환하는 함수이다.

역시 위와 마찬가지의 이유로 비어있을 때 동작하지 않도록 주의하며, 추가로 무언가 작성해야 원하는 동작을 한다.

 

(5) size : 큐의 크기(저장된 데이터의 개수) 반환

	q.size(); // int size()

큐에 저장된 데이터 개수를 반환한다.

다른 함수에서 실수하지 않았다면 size 함수 출력에 이상이 없을 것이다.

 

(6) empty : 큐가 비었는지에 대해 bool값 반환

	q.empty(); // bool empty()

큐가 비었다면 true(1), 비어있지 않다면 false(0) 값을 출력한다.

이는 문제에서 요구하는 값과 같다는 것을 알 수 있다.

 


위를 이용해서 구현한 전체 코드는 다음과 같다.

📚 전체 Code