백준 10845-큐
2024-04-14
문제
문제 링크
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
풀이
function solution(commands) {
const queue = [];
const answers = [];
const command = {
push: (value) => {
queue.push(value);
},
pop: () => {
if (queue.length === 0) {
answers.push(-1);
} else {
answers.push(queue.shift());
}
},
size: () => {
answers.push(queue.length);
},
empty: () => {
answers.push(queue.length === 0 ? 1 : 0);
},
front: () => {
answers.push(queue.length === 0 ? -1 : queue[0]);
},
back: () => {
answers.push(queue.length === 0 ? -1 : queue.at(-1));
},
};
commands.forEach((commandInfo) => {
const [currentCommand, value] = commandInfo.split(" ");
if (currentCommand === "push") {
command.push(value);
} else {
command[currentCommand]();
}
});
return answers.join("\n");
}
설명
문제 유형은 큐입니다. 기본적으로 제공되는 배열의 Method 를 활용하면 쉽게 문제를 풀 수 있을 것 같아 배열을 활용했습니다. 코드는 크게 두 개를 생각했습니다. 각각의 command 를 정의하는 코드, 실행해야할 command 를 순회하면서 실행하는 코드입니다.
- command 실행 후 결과 값을 담을
queue
와 command 실행 후 출력 값을 담을answer
을 선언합니다.- 주어진 조건에 따라 command 를 선언합니다. queue 의 pop 은 첫 요소를 제거해야하므로
array.shift
를 사용했습니다.- 실행해야할 command 를 forEach 를 통해 순회합니다. 이 때 push command 만 실행 시 값을 전달해야한다는 점을 반영하여 조건문을 작성했습니다.
- 예제 출력에 맞도록
join("\n")
을 사용했습니다.