본문 바로가기

Problem Solving

백준 10845 큐 - Java 자바 문제 풀이

문제 해설

 큐 자료구조를 직접 구현하면 되는 문제입니다. 자바 기본 제공 큐를 사용해도 됩니다. 이 글에서는 배열로 직접 큐를 구현하였습니다.

 

문제 풀이 계획

필요 변수

변수명 타입 초기값 설명
N int   명령어 수
command String   명령어
queue int[]   큐 배열
front int 0 큐의 머리를 가리키는 포인터
back int 0 큐의 끝을 가리키는 포인터

 

해결 로직

  1. N을 입력받는다.
  2. N번 동안 명령어를 입력받는다.
  3. 명령어에 따라 기능을 분기처리 한다.

 

풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
	
	public static int[] queue;
	public static int N;
	public static int front;
	public static int back;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		N = Integer.parseInt(st.nextToken());
		queue = new int[N];
		
		StringBuilder sb = new StringBuilder();
		
		while(N-- > 0) {
			st = new StringTokenizer(br.readLine());
			String command = st.nextToken();
			
			switch(command) {
			case "push": {
				int num = Integer.parseInt(st.nextToken());
				push(num);
				break;
			}
			case "pop": {
				sb.append(pop()).append('\n');
				break;
			}case "size": {
				sb.append(size()).append('\n');
				break;
			}case "empty": {
				sb.append(empty()).append('\n');
				break;
			}case "front": {
				sb.append(front()).append('\n');
				break;
			}case "back": {
				sb.append(back()).append('\n');
				break;
			}
			}
		}
		
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		bw.write(sb.toString());
		bw.flush();
		bw.close();
	}
	
	public static void push(int num) {
		queue[back++]=num;
	}
	public static int pop() {
		return (back-front == 0) ? -1 : queue[front++];
	}
	public static int size() {
		return back-front;
	}
	public static int empty() {
		return (back-front == 0) ? 1 : 0;
	}
	public static int front() {
		return (back-front == 0) ? -1 : queue[front];
	}
	public static int back() {
		return (back-front == 0) ? -1 : queue[back-1];
	}
}

 

 

 

10845번: 큐

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

www.acmicpc.net