본문 바로가기

Problem Solving

백준 10828 스택 - Java 자바 문제풀이

문제 해설

스택 자료구조를 직접 구현하는 문제입니다. 총 다섯가지의 명령에 따라 기능을 구현하면 됩니다.

 

문제 풀이 계획

필요 변수

변수명 타입 설명
N int 첫째 줄에 주어지는 명령의 수
arr int[] 숫자를 저장할 배열
top int 배열의 최종 인덱스를 가리킬 변수

 

해결 로직

  1. 명령 수 N을 입력 받는다.
  2. N 번에 걸쳐 명령어를 입력 받는다.
  3. 명령어 별로 분기 처리하여 각 로직을 처리한다.

 

풀이 코드

package com.newlecture.app.util;

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

public class Program {
	
	public static int N;
	public static int[] arr;
	public static int top = -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();
		
		// 1. 명령어 숫자를 입력 받는다.
		N = Integer.parseInt(st.nextToken());
		arr = new int[N];
		
		while(N-- > 0) {
			// 2. N 번의 명령어를 입력 받는다.
			st = new StringTokenizer(br.readLine());
			
			while(st.hasMoreTokens()) {
				// 3. 명령어에 따라 분기 처리한다. 
				String command = st.nextToken();
				
				switch(command) {
					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;
					}
					default: {
						sb.append(top()).append('\n');
					}
				}
			}
		}
		
		// 4. 출력한다
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		bw.write(sb.toString());
		bw.flush();
		bw.close();
	}
	
	public static void push(int n) {
		arr[++top]=n; // top index를 먼저 위로 올리고 값을 넣는다.
	}
	
	public static int pop() {
		return (top == -1) ? -1:arr[top--]; // 값을 먼저 빼고 top index를 아래로 내린다. 
	}
	
	public static int empty() {
		return (top == -1) ? 1:0;
	}
	
	public static int size() {
		return top+1;
	}
	
	public static int top() {
		return (top == -1) ? -1:arr[top];
	}
}

 

 

10828번: 스택

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

www.acmicpc.net