본문 바로가기

알고리즘

백준 10828번 스택

728x90

백준 10828번 스택

  • class 2
  • 실버 4
  • 정답률 37.248%

 

📖 문제

정수를 정수하느 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 다섯가지이다.

  • push X : 정수 X를 스택에 넣는 연산
  • pop : 스택에서 가장 위에 있는 정수를 빼고 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우 -1을 출력한다.
  • size : 스택에 들어있는 정수의 갯수를 출력한다.
  • empty : 스택이 비어 있으면 1, 아니면 0을 출력한다.
  • top : 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

 

📖 입력

첫째 줄에는 1이상 10,000이하인 정수N이 주어지고 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다.

문제에 나와있지 않은 명령이 주어지는 경우는 없다.

 

📖 출력

출력해야하는 명령이 주어질때마다, 한 줄에 하나씩 출력한다.


첫번째.

입력 N은 반복되는 LOOP횟수를 의미한다.

N번 반복해 문자열(String)을 입력받는다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());

for(int i = 0; i < n; i++) {
	String str = br.readLine();
}

두번째.

입력받은 문자열으 " "으로 나눠(split) 길이가 1인지, 2인지 구분해 push X와 그 외의 명령어를 구분해줘야 한다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
		
for(int i = 0; i < n; i++) {
    String[] str = br.readLine().split(" ");
    
    if(str.length != 1){ }
    else { }
}

세번째.

한줄 씩 읽을때 문자열이 어떤 명령어를 의미하는지 확인해 봐야 한다.

 

📖 문자열 비교(boolean)

String str = '안녕하세요'
str.equals('안녕하세요')

true 또는 false 로 출력된다. 

 

 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
		
for(int i = 0; i < n; i++) {
    String[] str = br.readLine().split(" ");
    
    if(str.length != 1){
    	// push명령어만 있을 경우에 해당
    } else {
    	if(str[0].equals("pop")){
        
        } else if(str[0].equals(""size""){
        
        }
    }
}

네번째. 

빈 stack 생성 후, 명령어 맞게 수행.

 

📖 stack

// 스택 생성
Stack<Integer> stack = new Stack<>();

// 스택에 값 입력 push, add
stack.push(Integer);
stack.add(Integer);

// 스택에 가장 최근에 입력된 값 추출 pop
stack.pop()

// 스택에 가장 최근에 입력된 값 보기(추출하진 않고 비교 또는 확인하고자 할 때)
stack.peek()

// 스택이 비어있는지 확인하는 확인하는 boolean값
stack.isEmpty()

// 스택 사이즈(길이) 값
stack.size()

전체 코드

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

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		Stack<Integer> stack = new Stack<>();
		
		for(int i = 0; i < n; i++) {
			String[] str = br.readLine().split(" ");
			String str1 = str[0];
			
			if(str.length != 1) {
				int x = Integer.parseInt(str[1]);				
				stack.push(x);
			}
			else {
				if(str1.equals("pop") && stack.isEmpty())
					System.out.println(-1);
				else if(str1.equals("pop") && !stack.isEmpty())
					System.out.println(stack.pop());
				else if(str1.equals("size"))
					System.out.println(stack.size());
				else if(str1.equals("empty") && stack.isEmpty())
					System.out.println(1);
				else if(str1.equals("empty") && !stack.isEmpty())
					System.out.println(0);
				else if(str1.equals("top") && stack.isEmpty())
					System.out.println(-1);
				else if(str1.equals("top") && !stack.isEmpty())
					System.out.println(stack.peek());
					
			}
		}

	}

}