[ Baekjoon ] 10828번 ( SILVER IV ) : 스택 (Java)

ma.caron_g·2022년 1월 21일
0
post-thumbnail

1. Problem 📃

[ 스택 ]

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


[ 문제 ]

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

명령은 총 다섯 가지이다.

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

2. Input ⌨️

[ 입력 ]

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다.
둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다.
주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다.
문제에 나와있지 않은 명령이 주어지는 경우는 없다.


3. Output 🖨

[ 출력 ]

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


4. Example 📚

[ 입출력 예시 ]

예제 입력예제 출력
14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top
2
2
0
2
1
-1
0
1
-1
0
3
7
pop

top
push 123
top
pop
top
pop
-1
-1
123
123
-1
-1

5. Solution 🔑

문제에 나와있듯이 push, pop, size, empty, top을 메서드로 구현하여 문제를 풀 것이다.


1. static으로 사이즈를 나타내는 변수(size)와 값들을 관리해줄 배열 변수(stack)을 선언한다.


2. push는 입력된 값을 스택에 넣는 명령이다.
배열 변수 stack에 값을 넣어주는데 이때 넣을 인덱스는 위에 size값을 넣어 넣어준다.
그 후 size를 ++(증가)시켜준다.


3. pop은 스택에 있는 값을 빼는 명령이다.
pop을 했을 때 만약 배열 stack에 값이 없다(size==0)면, -1을 반환한다.
값이 있다면 stack에서 size-1 값을 변수(n)에 담아두고, stack[size-1]값을 0(아무값)으로 바꿔준다. 그 후 size를 --(감소)시키고 n을 반환한다.


4. size는 스택의 길이를 나타내주는 명령이다.
변수 size값을 그대로 반환해주면 된다.


5. empty는 스택에 값의 유무를 판단하는 명령이다.
변수 size값이 0(비어있다)이면 1을, 그렇지 않다면 0을 반환한다.


6. top는 스택에 맨 위에 존재하는 값을 출력하는 명령이다.
배열 stack에 값이 존재하지 않다면(size==0) -1을, 그렇지 않다면 stack에서 size-1 인덱스에 위치한 값을 반환한다.


7. 메인 메서드에서는 몇 번 명령문을 입력 받을지에 대한 변수(N)을 선언하여 값을 입력받고,
모든 명령어가 push라면, N만큼의 값이 들어갈테니 static으로 선언한 stack 배열 변수의 사이즈를 N으로 지정해준다.


8. 그 후, N만큼 명령어를 받으면서 switch문을 이용하여 해당하는 값에 대한 메서드를 호출하여, 반환된 값을 StringBuilde(sb)에 담아 개행한다. 이를 N번하여 최종적인 StringBuilder(sb)를 출력한다.


6. Code 💻

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

public class Main {
	
	static int size = 0;
	static int[] stack;
	
	public static void push(int val) {
		stack[size] = val;
		size++;
	}	
	public static int pop() {
		if(size == 0) {
			return -1;
		}
		else {
			int n = stack[size-1];
			stack[size-1] = 0;
			size--;
			return n;
		}
	}
	public static int size() {
		return size;
	}
	public static int empty() {
		if(size == 0 ) {
			return 1;
		}
		else {
			return 0;
		}
	}
	public static int top() {
		if(size == 0) {
			return -1;
		}
		else {
			return stack[size - 1];
		}
	}
	
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringBuilder sb = new StringBuilder();
		
		int N = Integer.parseInt(st.nextToken());
		
		stack = new int[N];
		for(int i=0; i<N; i++) {
			
			st = new StringTokenizer(br.readLine(), " ");
			
			switch(st.nextToken()) {
			case "push" :
				push(Integer.parseInt(st.nextToken()));
				break;
			case "pop" :
				sb.append(pop()).append("\n");
				break;
			case "size" :
				sb.append(size()).append("\n");
				break;
			case "empty" :
				sb.append(empty()).append("\n");
				break;
			case "top" :
				sb.append(top()).append("\n");
				break;
			}
		}
		System.out.println(sb);
	}

}
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글