반응형
Notice
Recent Posts
Recent Comments
Link
지구정복
[자료구조] 백준 - 덱 본문
728x90
반응형
https://www.acmicpc.net/problem/10866
-문제해설
자바로는 배열을 이용해서 풀었다. 이때 pop_front나 pop_back, push_front같은 경우 인덱스값을 잘 활용해서
배열의 값을 한 칸씩 미루거나 땡겨줘야 한다.
파이썬은 리스트 구조여서 push같은 경우 insert( 인덱스, 삽입값 ) 메소드를 잘 활용하면 되고
pop같은 경우 pop(인덱스)를 활용하면 쉽게 풀 수 있다.
-자바
package dataStructure;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BJ10866 {
private static String[] deque = new String[10001];
private 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() );
StringTokenizer st;
String order;
String value = null;
while( n --> 0 ) {
st = new StringTokenizer( br.readLine() );
order = st.nextToken();
if( st.countTokens() == 1 ) value = st.nextToken();
switch( order ) {
case "push_front":
if( idx == 0 ) deque[idx++] = value;
else {
for( int i=idx; i>0; i-- ) deque[i] = deque[i-1];
deque[0] = value;
idx++;
}
break;
case "push_back":
deque[idx++] = value;
break;
case "pop_front":
if( idx == 0 ) sb.append( "-1\n" );
else {
sb.append( deque[0]+"\n" );
for( int i=0; i<idx-1; i++ ) deque[i] = deque[i+1];
idx--;
}
break;
case "pop_back":
if( idx == 0 ) sb.append( "-1\n" );
else {
sb.append( deque[--idx]+"\n" );
deque[idx] = null;
}
break;
case "size":
sb.append( idx+"\n" );
break;
case "empty":
if( idx == 0 ) sb.append( "1\n" );
else sb.append( "0\n" );
break;
case "front":
if( idx == 0 ) sb.append( "-1\n" );
else sb.append( deque[0]+"\n" );
break;
case "back":
if( idx == 0 ) sb.append( "-1\n" );
else sb.append( deque[idx-1]+"\n" );
break;
}
}
System.out.println( sb );
}
}
-파이썬
from sys import stdin
deq = []
next( stdin )
for l in stdin:
Order = l.split()
if Order[0]=="push_front":
if deq: deq.insert(0, Order[1] )
else: deq.append( Order[1] )
if Order[0]=="push_back":
deq.append( Order[1] )
if Order[0]=="pop_front":
if deq: print( deq.pop(0) )
else: print( -1 )
if Order[0]=="pop_back":
if deq: print( deq.pop() )
else: print( -1 )
if Order[0]=="size":
print( len(deq) )
if Order[0]=="empty":
if deq: print( 0 )
else: print( 1 )
if Order[0]=="front":
if deq: print( deq[0] )
else: print( -1 )
if Order[0]=="back":
if deq: print( deq[-1] )
else: print( -1 )
728x90
반응형
'데이터 엔지니어링 정복 > Algorithm' 카테고리의 다른 글
[이분탐색] 백준 - 랜선 자르기 (0) | 2021.07.31 |
---|---|
[자료구조] 백준 - 요세푸스 문제 0 (0) | 2021.07.30 |
[자료구조] 백준 - 큐 (0) | 2021.07.29 |
[자료구조] 백준 - 스택 (0) | 2021.07.29 |
[이분탐색, 자료구조] 백준 - 숫자 카드 2 (0) | 2021.07.29 |
Comments