Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Development Log

[Baekjoon] 10828번: 스택 본문

Coding Test/Baekjoon

[Baekjoon] 10828번: 스택

gu-su 2022. 2. 9. 18:41

스택(Stack)이란

  • 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO(Last In First Out)형식의 구조
  • 가장 최근에 스택에 추가한 항목이 가장 먼저 제거될 항목이다.

 

사용 사례

  1. 재귀 알고리즘 (스택을 사용하는게 유용하다!)
    - 재귀적으로 함수를 호출해야 하는 경우에 임시 데이터를 스택에 넣는다.
    - 재귀함수를 빠져 나와 퇴각 검색을 할 때, 스택에 넣어 둔 임시데이터를 빼준다.
  2. 웹 브라우저 방문기록 (뒤로가기)
  3. 실행 취소
  4. 역순 문자열 만들기
  5. 수식의 괄호 검사(연산자 우선순위 표현을 위한 괄호 검사)
  6. 후위 표기법 계산

 

🤩 참고

 

[자료구조] 스택(Stack)이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

자바 입출력(Java Input/Output)

 

Stream이란

stream이라는 통로를 통해 데이터가 입력되고 출력된다.

  1. inputStream : 입력장치로부터 자바 프로그램으로 데이터를 전달하는 소프트웨어 모듈
  2. outputStream : 자바 프로그램에서 출력장치로 데이터를 보내는 소프트웨어 모듈

 

명령어 읽기 

방법1. Scanner

Scannner sc = new Scanner(System.in);

방법2. BufferedReader (사용)

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.readLine(); // 1번째 줄
br.readLine(); // 2번째 줄

 

출력

방법1. BufferedWriter

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("출력할 값 넣기"); // 출력버퍼에 값을 넣는다.
bw.flush(); // 출력버퍼를 비우면서 출력
bw.close(); // 출력버퍼를 비운다.

방법2. System.out.print() (사용)

StringBuilder sb = new StringBuilder();
sb.append("값");
sb.append("값");
System.out.print(sb.toString); // 출력

StringBuilder사용이유

StringBuffer는 여러 곳에서 동시에 같은 문자열 인스턴스에 접근할 때 중복 점유를 막을 수 있는 장치가 되어있다. 동기화 처리때문에 StringBuilder에 비해 좀 더 무겁다.  

 

🤩  입출력부분에 대해 잘 정리하신 사이트같아서 슬쩍.. 같이 올려봅니다.

 

[Java] 입출력 메서드 정리

Java의 입력, 출력 방법을 정리한다. 문자열 포맷팅까지 알아보자.

velog.io

 

문제10828

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

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

소스코드

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

class Stack{
	
	private int[] stackArr;
	private int top;
	
	Stack(int totalCmdNum){
		stackArr = new int[totalCmdNum];
		top = -1;
	}
	
	void push(int value) {
		stackArr[++top] = value; 
	}
	
	int pop() {

		if(top < 0) {
			return -1;
		}
		int value = stackArr[top];
		stackArr[top--] = 0;
		return value;
		
	}
	int size() {
		
		return top+1;
	}
	int empty() {
		
		if(top < 0) {
			return 1;
		}
		return 0;
	}
	int top() {
		
		if(top < 0){
			return -1;
		}
		return stackArr[top];
		
	}
}

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int cmdNum = Integer.parseInt(br.readLine());
		Stack pbStack = new Stack(cmdNum);
		String cmd[];
		
		while(cmdNum-- > 0) {
			cmd = br.readLine().split(" ");
			
			switch(cmd[0]) {
				case "push":
					pbStack.push(Integer.parseInt(cmd[1]));
					break;
				case "pop":
					sb.append(pbStack.pop()).append("\n");
					break;
				case "size":
					sb.append(pbStack.size()).append("\n");
					break;
				case "empty":
					sb.append(pbStack.empty()).append("\n");
					break;
				case "top":
					sb.append(pbStack.top()).append("\n");
					break;
			}
		
			
		}
		
		System.out.print(sb.toString());
		br.close();
		
	}

}

 

결과

 

'Coding Test > Baekjoon' 카테고리의 다른 글

[Baekjoon] 10845번: 큐  (0) 2022.02.14
[Baekjoon] 1406번: 에디터  (0) 2022.02.13