728x90
문제 : https://www.acmicpc.net/problem/10845
10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
자바 큐 사용법을 숙지하고 있어야 하는 문제이다.
또한, 삼항 연산자 (ternary operator) 를 사용하여 풀어보았다.
삼항 연산자는 [ condition ? value1 : value2 ] 형식인데, 조건이 True이면 value1을, False이면 value2를 리턴한다.
자바에서 입력받는 방법은 Scanner 와 BufferedReader 가 있는데,
초반에는 Scanner 를 접하고 더 편하지만, BufferedReader를 사용한 방법이 더 빠르기 때문에 알고리즘 풀이에 자주 쓰인다.
BufferedReader는 무조건 문자열로 받아오기 때문에, 정수형이나 실수형 변수에 저장하기 위해서는 형변환이 필요하다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String []args) throws IOException {
Queue<Integer> queue = new LinkedList<>(); // 큐 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int a = 0;
for (int i=0;i<N;i++){ // 명령의 수 N
StringTokenizer st = new StringTokenizer(br.readLine());
String S = st.nextToken();
if (S.equals("push")){
a = Integer.parseInt(st.nextToken());
queue.add(a); // 정수 a를 입력받고, add로 push
}
else if(S.equals("pop"))
System.out.println(queue.isEmpty() ? -1 : queue.poll()); // 비어있으면 -1, 아니면 poll
else if(S.equals("size"))
System.out.println(queue.size()); // 큐의 size를 출력
else if(S.equals("empty"))
System.out.println(queue.isEmpty() ? 1 : 0); // 비어있으면 1, 아니면 0
else if (S.equals("front"))
System.out.println(queue.isEmpty() ? -1 : queue.peek()); // 비어있으면 -1, 아니면 peek
else if (S.equals("back"))
System.out.println(queue.isEmpty() ? -1 : a); // 비어있으면 -1, 아니면 가장 최근에 push한 a값 출력
}
}
}
728x90