Development Log
[Baekjoon] 10828번: 스택 본문
스택(Stack)이란
- 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 LIFO(Last In First Out)형식의 구조
- 가장 최근에 스택에 추가한 항목이 가장 먼저 제거될 항목이다.
사용 사례
- 재귀 알고리즘 (스택을 사용하는게 유용하다!)
- 재귀적으로 함수를 호출해야 하는 경우에 임시 데이터를 스택에 넣는다.
- 재귀함수를 빠져 나와 퇴각 검색을 할 때, 스택에 넣어 둔 임시데이터를 빼준다. - 웹 브라우저 방문기록 (뒤로가기)
- 실행 취소
- 역순 문자열 만들기
- 수식의 괄호 검사(연산자 우선순위 표현을 위한 괄호 검사)
- 후위 표기법 계산
🤩 참고
[자료구조] 스택(Stack)이란 - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
자바 입출력(Java Input/Output)
Stream이란
stream이라는 통로를 통해 데이터가 입력되고 출력된다.
- inputStream : 입력장치로부터 자바 프로그램으로 데이터를 전달하는 소프트웨어 모듈
- 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 |