10828번 스택(구현) Java

2021. 9. 17. 23:57알고리즘/백준 알고리즘기초

반응형

문제

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

명령은 총 다섯 가지이다.

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

입력

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

출력

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

 

출처: <https://www.acmicpc.net/problem/10828>

 

##문제이해##

스택의 구조를 직접 구현해보는 문제..! 맨날 만들어진걸 사용하다가 메서드를 간단하게라도 구현하는 부분이 나왔다.

참고한 주소 https://st-lab.tistory.com/175

 

[백준] 10828번 : 스택 - JAVA [자바]

www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000..

st-lab.tistory.com

 

##코드##


import java.util.Scanner;

public class boj_10828 {
	private static int[] stack;
	private static int size=0;//최초 사이즈 설정
	public static void main(String[] args) {
		/*
		 * 
		push X: 정수 X를 스택에 넣는 연산이다.
		pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
		size: 스택에 들어있는 정수의 개수를 출력한다.
		empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
		top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
		 */
		
		Scanner sc = new Scanner(System.in);
		StringBuffer sb = new StringBuffer();
		int N = sc.nextInt();
		
		stack = new int[N];
		for(int i=0; i<N; i++) {
			String str = sc.next();
			switch (str) {
			case "push": push(sc.nextInt());
				break;
			case "pop": sb.append(pop()).append("\n");
				break;
			case "size": sb.append(size()).append("\n");
				break;
			case "empty": sb.append(empth()).append("\n");
				break;
			case "top": sb.append(top()).append("\n");
				break;
			}
		}
		System.out.println(sb);
		
	}
	/**
	 * 입력받은 number를 배열에 넣고 사이즈를 증가시키는 메서드
	 * @param number
	 */
	public static void push(int number) {
		stack[size] = number;
		size++;
	}
	public static int pop() {
		//데이터 없는경우 -1
		if(size==0) {
			return -1;
		}else {
			int result = stack[size-1];
			stack[size-1]=0; //값 초기화
			size--;
			return result;
		}
	}
	/**
	 * 현재 스택의 사이즈를 반환하는 메서드
	 * @return stack.length
	 */
	public static int size() {
		return size;
	}
	/**
	 * 스택이 비어있는지체크 비었으면 1 아니면 0을 반환
	 * @return 1,0
	 */
	public static int empth() {
		if(size==0) {
			return 1;
		}else{
			return 0;
		}
	}
	public static int top() {
		//데이터 없는경우 -1
		if(size==0) {
			return -1;
		}else {
			//맨 마지막 숫자를 반환해준다.
			return stack[size-1];
		}
		
	}

}
반응형