[백준18258] 큐2 / Java

Hyeongmin Jung·2022년 11월 23일
0

java

목록 보기
7/28

링크 | https://www.acmicpc.net/problem/18258

문제 |

정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.

  • push X: 정수 X를 큐에 넣는 연산이다.
  • pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 큐에 들어있는 정수의 개수를 출력한다.
  • empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
  • front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력 |

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

출력 |

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

예제 |

입력

15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front

출력

1
2
2
0
1
2
-1
0
1
-1
0
3

Solution |

  • LinkedList 사용: LinkedList queue = new LinkedList();

    • 추가: queue.add("one"), queue.add(0,"two"), queue.set(0,"three")
      -> [three, one] (단, 인덱스를 지정하지 않으면 가장 끝 값에 추가된다.)
    • 삭제: queue.removeFirst(), queue.removeLast(),queue.clear()
      queue.remove(1)(단, 인덱스 지정하지 않으면 0번째 제거)
    • 사이즈: queue.size()
    • 출력: queue.get(1)
      queue.peek() // 첫번째 항목 출력 peekfirst(), peeklast()
      queue.poll() // 첫번째 항목 출력 후 pop pollfirst(), polllast()

    Iterator iter = list.iterator();
    while(iter.hasNext()){
       System.out.println(iter.next());
    }

    • 검색: queue.contains(1) // 1이 있는 지 검색 t/f
      queue.indesOf(1) // 1이 있는 index, 반환 없으면 -1
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Queue {
	static LinkedList<String> queue = new LinkedList<String>();
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		String n;
		
		int N = Integer.parseInt(br.readLine());
		StringTokenizer split;
		
		for(int i=0; i<N; i++) {
			split = new StringTokenizer(br.readLine(), " ");
			String str = split.nextToken();
			if (str.equals("push")){
				n = split.nextToken();
				push(queue, n);
			}
			
			switch(str) {
				case "pop":
					sb.append(pop(queue)).append('\n');
					break;
				case "size":
					sb.append(size(queue)).append('\n');
					break;
				case "empty":
					sb.append(empty(queue)).append('\n');
					break;
				case "front":
					sb.append(front(queue)).append('\n');
					break;
				case "back":
					sb.append(back(queue)).append('\n');
					break;
			}
		}
		System.out.println(sb);
	}
	
	static void push(LinkedList<String> q, String str) {
		q.add(str);
	}
	static String pop(LinkedList<String> q) {
		// 큐가 비어있으면 -1
		if (empty(q).equals("1")) {
			return "-1";
		}
		return q.poll();
	}
	static String size(LinkedList<String> q) {
		return Integer.toString(q.size());
	}
	static String empty(LinkedList<String> q) {
		if(q.size()==0)
			return "1";
		return "0";
	}
	static String front(LinkedList<String> q) {
		if (empty(q).equals("1")) {
			return "-1";
		}
		return q.peek();
	}
	static String back(LinkedList<String> q) {
		if (empty(q).equals("1")) {
			return "-1";
		}
		return q.peekLast();
	}

0개의 댓글