[백준][Java] 28278 - 스택 2

박현아·2025년 2월 7일
1

백준

목록 보기
4/4

👩‍💻 문제

🙋‍♀️ 답변

package backjoon;

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

public class 스택2_28278_2ndTry {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		
		Deque<Integer> stack = new ArrayDeque<>();
		
		for (int i=0; i<N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int command = Integer.parseInt(st.nextToken());
			
			switch(command) {
				case 1:
					int x = Integer.parseInt(st.nextToken());
					stack.push(x);
					break;
				case 2:
					System.out.println(stack.isEmpty() ? -1 : stack.pop());
					break;
				case 3:
					System.out.println(stack.size());
					break;
				case 4:
					System.out.println(stack.isEmpty() ? 1 : 0);
					break;
				case 5:
					System.out.println(stack.isEmpty() ? -1 : stack.peek());
					break;
			}
		}
		br.close();
		
	}

}

⭐️

  • BufferedReader로 입력을 받아준다. (Scanner 보다 성능이 빠르다)
  • N에 명령어 총 개수를 담아준다. br.readLine()은 String 형식이라 Integer.parseInt(br.readLine());로 int 형식으로 바꿔줘야 한다.
  • ArrayDeque<>를 써서 stack을 생성해준다. (Stack<> stack 보다 성능이 빠르다.)
  • N번 동안 반복해준다.
  • StringTokenizer에 그 다음 입력받은 라인을 받아와서, 첫 번째 숫자는 command에 담아준다.
  • command가 1인 경우, 명령의 1 이후에 stack에 담아야 되는 숫자를 또 받아와야되기 때문에 int x에 그 다음 숫자를 넣어준다.
    stack에 x를 담아준다. (stack.push(x);)
  • command가 2인 경우, stack이 비었을 때 -1을, 비지 않았을 때 stack의 마지막 숫자를 뺀 후 출력한다. (stack.pop();)
  • command가 3인 경우, stack에 담긴 정수의 개수를 출력한다. (stack.size();)
  • command가 4인 경우, stack이 비었을 때 1을, 비지 않았을 때 0을 출력해준다.
  • command가 5인 경우, stack이 비었을 때 -1을, 비지 않았을 때 마지막 숫자를 출력한다. (stack.peek();)
  • br.readLine() 때문에 예외 처리를 해줘야된다. 안 하니까 컴파일 에러 뜬다. (throws NumberFormatException, IOException)

🤔

처음 시도에서 Scanner와 Stack<>을 썼는데 시간 초과도 아니고 그냥 틀렸습니다! 로 떴다. Eclipse에서 실행했을 때에는 위에 쓴 코드랑 똑같이 결과가 나왔는데 왜 틀렸습니다가 떴는지 모르겠다! 아시는 분 알려주세요 🤨

할 것 ✏️

  • BufferedReader 정리
  • StringTokenizer 정리
  • ArrayDeque<> stack과 Stack<> stack 비교 정리
  • ArrayDeque<> queue와 LinkedList<> queue 비교 정리

0개의 댓글