Coding 01

백준 [18258]번: 큐 2 ( Java ) 본문

백준

백준 [18258]번: 큐 2 ( Java )

하루우울루 2023. 2. 12. 17:15

https://www.acmicpc.net/problem/18258 // 문제링크

 

18258번: 큐 2

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

www.acmicpc.net

 

개발환경은 eclipse를 사용했습니다.

 

import java.util.*;
import java.io.*;

public class Main
{
	public static void main(String[] args) throws IOException 
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		Deque<Integer> queue = new LinkedList<>();
		
		int n = Integer.parseInt(br.readLine());
		
		StringTokenizer command;
		
		while(n>0)
		{
			command = new StringTokenizer(br.readLine()," ");
			
			switch(command.nextToken())
			{
				
			case "push" :
			{
				int num = Integer.parseInt(command.nextToken());
				
				queue.offer(num);
				break;
			}
			
			case "pop" :
			{
				Integer t = queue.poll();
				
				if(t == null)
				{
					sb.append(-1+"\n");
				}
				else
				{
					sb.append(t+"\n");
				}
				break;
			}
			
			case "size" :
			{
				sb.append(queue.size()+"\n");
				break;
			}
			
			case "empty" :
			{
				if(queue.isEmpty())
				{
					sb.append(1+"\n");
				}
				else
				{
					sb.append(0+"\n");
				}
				break;
			}
			
			case "front" :
			{
				Integer t = queue.peek();
				
				if(t == null)
				{
					sb.append(-1+"\n");
				}
				else
				{
					sb.append(t+"\n");
				}
				
				break;
			}
			
			case "back" :
			{
				Integer t = queue.peekLast();
				
				if(t == null)
				{
					sb.append(-1+"\n");
				}
				else
				{
					sb.append(t+"\n");
				}
				
				break;
			}
			
			}
			
			n--;
		}
		
		System.out.println(sb);
		
	}
}

 

 


 

큐 문제를 처음 풀어보았다.

큐에는 들어온 값들 중 가장 마지막값을 반환하는 메서드가 없어서 덱으로 풀었다.

큐를 몰라서 구글링하면서 큐에 대해 알아가면서 풀었던 것 같다.

 

stack과 큐에서 사용하는 메서드가 달라서 기억해야겠다고 생각했다.

 

문제를 풀면서 한번 틀렸었는데 poll()메소드를 사용할 때 큐에 들어있는 메서드가 없을 경우에는  -1을 반환해야 하는 예외처리를 해야 되는데 정답과 달리 

 

if(queue.poll() == null) 

{

~~

}

else

{

sb.append(queue.poll());

}

해서 틀렸었다.

 

별 생각없이 하다 틀려서 앞으로 기억에 남을 것 같다.

 

그리고 null 값일 경우 Integer로 받는데 이게 처음에 int형으로 받았다가 오류가 나서 Integer와 int의 차이도 알게 되었다

 

자세한 건 더 공부해야겠지만 기억에 남는 건 

int 자료형은 

산술연산이 가능하고

null 초기화가 불가능하다

 

Integer 래퍼 클래스

null 값을 처리가능하다 

 

이 정도이다.