본문 바로가기
알고리즘/백준

[BAEKJOON] 18258 큐 2

by 응애~ 개발자 2022. 11. 16.
728x90
반응형

문제 요약

  • 알고리즘 분류: 큐
  • 난이도: Silver4
  • 문제내용:
    • 위 명령 조건에 맞게 처리해라~

문제풀이

 이번 문제 큐에 관련된 문제이다. 일반적으로 구현하면 시간 초과가 떠서 큐 이론을 적용한 상태로 풀어야 된다. 

 큐에 대한 자세한 내용은 밑에 사이트에 참조하면된다.

https://jih3508.tistory.com/263

 

[알고리즘 이론] 큐(Queue)

이론 이본에 볼 자료구조는 큐이다. 스택은 FIFO 입선출인 자료구조이다. 즉 먼저들어간게 먼저 들어 온다는 뜻이다. 큐에 자세한 내용은 아래의 사이트에서 확인해라.https://namu.wiki/w/%ED%81%90(%EC%

jih3508.tistory.com

Code

Python

 파이썬은 deque라는 라이브러리를 사용하면 된다. popleft사용하면 0번째 인덱스 삭제 걸리는 시간은 O(1)로 나온다. 그리고 deque는 코태에서 많이 사용되서 알아두어야 될 모듈이다.

from collections import deque
import sys
input = sys.stdin.readline
queue = deque()

for _ in range(int(input())):
    commend = input().split()
    if commend[0] == "push":
        queue.append(int(commend[1]))
    elif commend[0] == "pop":
        print(queue.popleft() if queue else - 1)
    elif commend[0] == "size":
        print(len(queue))
    elif commend[0] == "empty":
        print(0 if queue else 1)
    elif commend[0] == "front":
        print(queue[0] if queue else -1)
    elif commend[0] == "back":
        print(queue[-1] if queue else -1)

Java

  자바는 Queue라는 클래스 있는데 사용해보니까 시간 초과가 나온다. 정석대로 구현 하면된다.

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

public class Main {
	
	static int[] queue = new int[2000000];
	static int front = 0;
	static int back = -1;
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		StringTokenizer st;
		String commend;
		Integer value;
		StringBuffer sb = new StringBuffer();
		while(N-- > 0) {
			st = new StringTokenizer(br.readLine());
			commend = st.nextToken();
			switch(commend) {
				case "push":
					push(Integer.parseInt(st.nextToken()));
					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;
			}
			
		}
		System.out.println(sb);	
	}
	
	static void push(int value) {	
		back++;
		queue[back] = value;
	}
	
	static int pop() {
		if(front > back) {
			return -1;
		}
		else {
			int value = queue[front];
			front++;
			return value;
		}
	}
	
	static int size() {
		return back - front + 1;
	}
	
	static int empty() {
		return front > back? 1 : 0;
	}
	
	static int front() {
		return front > back? -1 : queue[front];
	}
	
	static int back() {
		return front > back?  -1 : queue[back]; 
	}
}
728x90
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[BAEKJOON] 15828 Router  (0) 2022.11.17
[BAEKJOON] 11718 그대로 출력하기  (0) 2022.11.17
[BAEKJOON] 9086 문자열  (0) 2022.11.16
[BAEKJOON] 13305 주유소  (0) 2022.11.15
[BAEKJOON] 25682 체스판 다시 칠하기 2  (1) 2022.11.14