알고리즘 문제 풀이

선형큐 구현하기

딩신 2018. 10. 1. 12:03

큐 구현하기

 

문제


이 문제에서는 큐를 구현한다. 큐는 다음 세 개의 연산을 지원한다. Push X : 큐에 정수 X를 push한다. 만약 rear 포인터가 더 이상 뒤로 갈 수 없다면, “Overflow”를 출력한다. Pop : 큐에서 정수 하나를 pop한다. 만약 front 포인터가 더 이상 뒤로 갈 수 없다면, “Underflow”를 출력한다. Front : 큐의 front에 있는 정수를 출력한다. 만약 큐가 비어있다면 “NULL”을 출력한다. 크기가 n인 큐에 m개의 연산을 하는 프로그램을 작성하시오. 입력의 편의를 위해서 Push는 “1”, Pop은 “2”, Top은 “3”으로 표현한다. 다음은 크기 4인 큐에 10개의 연산이 입력으로 주어졌을 때의 입력과 출력의 예이다. 참고로, 다음 예제는 선형 큐의 대표적인 나쁜 예이다. 다음 예제때문에 선형 큐는 쓰이지 않는다.

XYZ

 

입력


첫째 줄에 큐의 크기 n, 연산의 개수 m이 주어진다. ( 1 n 100, 1 m 1,000 ) 두 번째 줄부터 연산이 주어진다. 1은 Push, 2는 Pop, 3은 Front 연산을 의미한다.  

출력


연산의 결과를 출력한다.

 

예제 입력

4 15
1 1
1 2
1 3
3
2
2
3
1 4
1 5
3
2
2
1 6
2
3

예제 출력

1
3
Overflow
3
Overflow
Underflow
NULL


코드 // 선형큐

//선형큐구현

import java.util.*;

public class Main {

public static ArrayList<Integer> box = new ArrayList<>();
public static int[] queue;
public static int queueFront = 0;
public static int queueCount = 0;

//첫째 줄에 큐의 크기 n, 연산의 개수 m이 주어진다. ( 1 n 100, 1 m 1,000 )
// 두 번째 줄부터 연산이 주어진다. 1은 Push, 2는 Pop, 3은 Front 연산을 의미한다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//총 몇개의 숫자를 입력 받을 것인지
int a;
int b;
int c;
int d = 0;

a = sc.nextInt();
queue = new int[a];

b = sc.nextInt();

for (int i = 0; i < b; i++) {
c = sc.nextInt();
if (c == 1) {
d = sc.nextInt();
}
operation(c, d);
}

sc.close();


}


public static void operation(int op, int data) {
if (op == 1) {
if (queueCount > queue.length - 1) System.out.println("Overflow");
else {
queue[queueCount] = data;
queueCount++;
}
} else if (op == 2) {
if (queueFront >= queueCount) System.out.println("Underflow");
else queueFront++;

} else if (op == 3) {
if (queueFront >= queueCount) System.out.println("NULL");
else System.out.println(queue[queueFront]);
}
}


}