728x90
<문제>
https://www.acmicpc.net/problem/18258
18258번: 큐 2
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
<풀이>
1. 어떤 접근으로 문제를 접근하려고 했는지
Deque를 이용하려고 했으나, 큐를 구현해 보고자 배열을 이용해 큐를 구현했다.
앞에 있는 원소를 제거하는 기능을 구현하고자 front 변수를 활용해 처음에 0을 저장해 놓고 pop을 하면 front번째 값을 가져오고 front값을 1씩 더했다.
맨 뒤 값을 가져와야 하기 때문에 back 변수를 활용해서 front와 비슷한 방식으로 문제를 해결했다.
배열의 사이즈는 이미 정해져있으므로 size 변수를 통해 값이 들어오면 push를 할 때마다 size값을 하나씩 키우고 pop을 할 대마다 size 값을 하나씩 감소시켰다.
2. 문제를 해결하기 위한 기능 목록
문제 에서 요구하는 각 메서드 기능 (push, pop, size, empty, front, back)
<코드>
import java.util.*;
import java.io.*;
public class Main {
static int[] q = new int[2000001];
static int size = 0;
static int front = 0;
static int back = 0;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for(int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String s = st.nextToken();
if (s.equals("push")) push(Integer.parseInt(st.nextToken()));
else if(s.equals("pop")) pop();
else if(s.equals("size")) size();
else if(s.equals("empty")) empty();
else if(s.equals("front")) front();
else back();
}
System.out.println(sb);
}
static void push(int n) {
q[back] = n;
back++;
size++;
}
static void pop() {
if(size == 0) {
sb.append(-1).append('\n');
}
else {
sb.append(q[front]).append('\n');
size--;
front++;
}
}
static void size() {
sb.append(size).append('\n');
}
static void empty() {
if(size == 0) {
sb.append(1).append('\n');
}
else sb.append(0).append('\n');
}
static void front() {
if(size == 0) {
sb.append(-1).append('\n');
}
else {
sb.append(q[front]).append('\n');
}
}
static void back() {
if(size == 0) {
sb.append(-1).append('\n');
}
else {
sb.append(q[back - 1]).append('\n');
}
}
}
728x90
'Algorithm > 백준 자바' 카테고리의 다른 글
| 백준 1918 자바 (후위 표기식) (0) | 2024.04.22 |
|---|---|
| 백준 2164 자바 (카드 2) (0) | 2024.04.22 |
| 백준 10773 자바 (1) | 2024.04.20 |
| 백준 28278 자바 (스택2) (0) | 2024.04.20 |
| 백준 15686 자바 (치킨 배달) (0) | 2024.03.11 |