본문 바로가기
백준

백준 28278: 스택 2(java)

by unhyepnhj 2024. 7. 12.

문제

문제에는 스택을 구현하라고 돼 있지만 자바 기본 Stack 클래스를 사용해도 될 것 같다.

직접 구현하려면 아래 링크 참조


풀이

 

명령이 줄글로 되어 있지만, 1번은 push(), 2번은 pop(), 4번은 empty(), 5번은 peek()와 동일하다.

모두 Stack 클래스의 기본 메소드로 제공되는 것들이다.

Stack<E> 클래스는 Vector<E> 클래스를 상속받으므로 size() 메소드를 사용해 3번 또한 해결할 수 있다.

아래는 기타 설명 링크들

Stack 클래스에 대한 더 자세한 설명 링크

Stack을 직접 구현하는 방법 링크

자료구조-스택 개념 설명 링크

 

늘 그렇듯 BufferedReader로 문자열을 입력받아 StringTokenizer로 분리하였다. 명령은 cmd, 입력값은 num에 저장하였고(num은 1번 명령일 때만), switch문으로 1~5번 명령을 나눠 주었다.

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

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		Stack<Integer> stack=new Stack<>();
		
		int N=Integer.parseInt(in.readLine());
		for(int i=0; i<N; i++) {
			st=new StringTokenizer(in.readLine());
			int cmd=Integer.parseInt(st.nextToken());
			switch(cmd) {
			case 1:	//push
				int num=Integer.parseInt(st.nextToken());
				stack.push(num);
				break;
			case 2:	//pop
				if(stack.empty())
					System.out.println(-1);
				else
					System.out.println(stack.pop());
				break;
			case 3:	//size
				System.out.println(stack.size());
				break;
			case 4:	//empty
				if(stack.empty())
					System.out.println(1);
				else
					System.out.println(0);
				break;
			case 5:	//peek
				if(stack.empty())
					System.out.println(-1);
				else
					System.out.println(stack.peek());
				break;
			default:
					break;
			}//end of switch
		}
	}
}

StringBuilder로 출력을 모아 뒀다 한 번에 출력하면 더 깔끔할 듯한데

이미 제출해버려서 귀찮다

'백준' 카테고리의 다른 글

백준 4949: 균형잡힌 세상(java)  (0) 2024.07.12
백준 10773: 제로(java)  (0) 2024.07.12
백준 9012: 괄호(java)  (0) 2024.07.12
백준 10828: 스택(java)  (0) 2024.07.12
백준 1676: 팩토리얼 0의 개수(java)  (0) 2024.07.09