지구정복

[자료구조] 백준 - 큐 본문

데이터 엔지니어링 정복/Algorithm

[자료구조] 백준 - 큐

nooh._.jl 2021. 7. 29. 17:40
728x90
반응형

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

 

10845번: 큐

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

www.acmicpc.net

 

-문제해설

저번 포스팅인 스택과 비슷한 문제인 큐를 구현하는 문제이다.

스택에서는 ArrayList를 사용했는데 이번에는 배열을 사용해서 풀어봤다.

 

전역변수로 큐를 나타낼 배열과 배열의 인덱스값인 idx를 선언했다.

특히 pop할 때 배열의 값들을 앞으로 한 칸씩 땡기고 idx값도 -1을 해줌으로써 구현할 수 있었다.

 

파이썬은 편한게 그냥 pop( index ) 메소드사용하면 한 칸씩 땡길 필요가 없다.

 

 

-자바

package dataStructure;

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

public class BJ10845 {
	static String[] que;
	static int idx;
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuffer sb = new StringBuffer();
		int n = Integer.parseInt( br.readLine() );
		que = new String[n];
		
		String order;
		while( n --> 0 ) {
			order = br.readLine();
			
			switch( order.charAt(0) ) {
			case 'p':
				if( order.charAt(1) == 'u' ) que[idx++] = order.substring( 5 );
				
				else {
					if( idx == 0 ) sb.append( "-1\n" );
					else {
						sb.append( que[0] + "\n" );
						for( int i=0; i<idx-1; i++ ) que[i] = que[i+1];
						que[--idx] = null;
					}
				}
				break;
				
			case 's':
				sb.append( idx+"\n" );
				break;
				
			case 'e':
				if( idx == 0 ) sb.append( "1\n" );
				else sb.append( "0\n" );
				break;
				
			case 'f':
				if( idx == 0 ) sb.append( "-1\n" );
				else sb.append( que[0] + "\n" );
				break;
				
			case 'b':
				if( idx == 0 ) sb.append( "-1\n" );
				else sb.append( que[idx-1] + "\n" );
				break;
				
			}
		}//while end
		
		System.out.println( sb );
	}
}

 

-파이썬

from sys import stdin
que = []
next( stdin )

for line in stdin:
    Order = line.split()

    if Order[0]=="push":
        que.append( Order[1] )
    elif Order[0]=="pop":
        if que: print( que.pop(0) )
        else: print( "-1" )
    elif Order[0]=="size":
        print( len(que) )
    elif Order[0]=="empty":
        if que: print( "0" )
        else: print( "1" )
    elif Order[0]=="front":
        if que: print( que[0] )
        else: print( "-1" )
    elif Order[0]=="back":
        if que: print( que[-1] )
        else: print( "-1" )

 

728x90
반응형
Comments