https://www.acmicpc.net/problem/18258

 

18258번: 큐 2

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

www.acmicpc.net

코드설명

큐 자료구조 문제입니다.

 

문제의 로직대로 구현하면되는데,

이떄 back 명령어일경우, lastWord라는 변수에 push를 할때마다 계속해서 갱신해주어 마지막에 넣은 단어를 저장해나갑니다. 

또한 시간초과가 날 수 있으므로 Stringbuilder를 활용하여 입출력 시간을 감소시킵니다.

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	public static int N;
	public static Queue<Integer> q = new LinkedList<>();
	public static StringBuilder sb = new StringBuilder();
	public static int answer = 0;
	public static int lastWord = -1;
    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());
    	for(int i=0;i<N;i++) {
    		st = new StringTokenizer(br.readLine());
    		String command = st.nextToken();
    		if(command.equals("push")) {
    			int x = Integer.parseInt(st.nextToken());
    			lastWord = x;
    			q.add(x);
    		}
    		else if(command.equals("front")) {
    			if(q.isEmpty()) {
    				sb.append(-1).append('\n');
//    				System.out.println("-1");
    			}else {
    				sb.append(q.peek()).append('\n');
//    				System.out.println(q.peek());	
    			}
    		}
    		else if(command.equals("back")) {
    			if(q.isEmpty()) {
    				sb.append(-1).append('\n');
//    				System.out.println("-1");
    				
    			}else {
    				sb.append(lastWord).append('\n');
//    				System.out.println(lastWord);
    			}
    		}
    		else if(command.equals("size")) {
//    			System.out.println(q.size());
    			sb.append(q.size()).append('\n');
    		}
    		else if(command.equals("empty")) {
    			if(q.isEmpty()) {
    				sb.append(1).append('\n');
//    				System.out.println(1);
    			}else {
    				sb.append(0).append('\n');
//    				System.out.println(0);
    			}
    		}
    		else if(command.equals("pop")) {
    			if(q.isEmpty()) {
    				sb.append(-1).append('\n');
//    				System.out.println("-1");
    			}else {
    				sb.append(q.poll()).append('\n');
//    				System.out.println(q.poll());	
    			}
    			
    		}
    		
    		
    	}
    	System.out.println(sb.toString());
    	
    }
    
    
    
}

+ Recent posts