백준 10866 덱 java

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

import java.io.IOException;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.NoSuchElementException;
import java.util.Scanner;

//뭐가 문제인지를 모르겠는 풀이 
public class Main {

public static void main(String[] args) throws NoSuchElementException {
	ArrayDeque<Integer> deque = new ArrayDeque<Integer>();
	Scanner sc = new Scanner(System.in);
	int N = sc.nextInt();
	int insert = 0;
	for(int i =0; i <N ; i++) {
		
		String order = sc.next();
		
		switch(order) {
		
		case "push_front":
			int x = sc.nextInt();
			insert = x;
			deque.addFirst(x);
			break; 
		
		case "push_back":
			int x2 = sc.nextInt();
			insert = x2;
			deque.addLast(x2);
			break;
			
		case "pop_front":
			if(deque.isEmpty()) {
				System.out.println(-1);
			}
			System.out.println(deque.pollFirst());
			break;
		
		case "pop_back":
			if(deque.isEmpty()) {
				System.out.println(-1);
			}
			System.out.println(deque.pollLast());
			break;
			
		case "size":
			
			 System.out.println(deque.size());
			break;
			
		case "empty":
			if(deque.isEmpty()==true) {
				System.out.println(1);
			}else {
				System.out.println(0);
			}
			break;
		case "front":
			if(deque.isEmpty()==true) {
				System.out.println(-1);
			}else {
				System.out.println(deque.peekFirst());
			} // getFirst 와는 뭐가 다르지 ? 
            break;
        
		case "back":
			if(deque.isEmpty()==true) {
				System.out.println(-1);
			}else {
				System.out.println(deque.peekLast());
			}
            break;
		}
	}
}
}

위의 코드는 내가 풀어 본 코드인데

예제
15
push_back 1
push_front 2
front
back
size
empty
pop_front
pop_back
pop_front
size
empty
pop_back
push_front 3
empty
front

을 입력시

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

가 출력되는 것이 아니라
size 부분에서 null 이 출력이 된다.
정수로 길이가 출력되어야하니 0 이 나와야하는데 ... 이유를 생각해 봐도 모르겠다.


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.NoSuchElementException;
import java.util.Scanner;

//뭐가 문제인지를 모르겠는 풀이 
public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		ArrayDeque<Integer> deque = new ArrayDeque<Integer>();
		StringBuilder sb = new StringBuilder();

		int N = Integer.parseInt(br.readLine());

		for (int i = 0; i < N; i++) {
			String[] s = br.readLine().split(" ");

			switch (s[0]) {

			case "push_front":
				deque.addFirst(Integer.parseInt(s[1])); //  이 부분이 이해가 안감 
				break;

			case "push_back":
				deque.addLast(Integer.parseInt(s[1]));
				break;

			case "pop_front":
				if (deque.isEmpty()) {
					sb.append(-1).append('\n');

				} else {
					sb.append(deque.pollFirst()).append('\n');
				}
				break;

			case "pop_back":
				if (deque.isEmpty()) {
					sb.append(-1).append('\n');
				} else {
					sb.append(deque.pollLast()).append('\n');

				}
				break;

			case "size":
				sb.append(deque.size()).append('\n');
				break;

			case "empty":
				if (deque.isEmpty()) {
					sb.append(1).append('\n');

				} else {
					sb.append(0).append('\n');
				}
				break;

			case "front":
				if (deque.isEmpty()) {
					sb.append(-1).append('\n');

				} else {
					sb.append(deque.peekFirst()).append('\n');
				}
				break;

			case "back":
				if (deque.isEmpty()) {
					sb.append(-1).append('\n');
				} else {
					sb.append(deque.peekLast()).append('\n');
				}
				break;

			}
		}
		System.out.println(sb);
	}
}

다른 분이 푼 위의 코드는 정상 작동한다.
이유를 더 알아보아야겠다.

좋은 웹페이지 즐겨찾기