728x90
백준 10828번 스택
- class 2
- 실버 4
- 정답률 37.248%
📖 문제
정수를 정수하느 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 다섯가지이다.
- push X : 정수 X를 스택에 넣는 연산
- pop : 스택에서 가장 위에 있는 정수를 빼고 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우 -1을 출력한다.
- size : 스택에 들어있는 정수의 갯수를 출력한다.
- empty : 스택이 비어 있으면 1, 아니면 0을 출력한다.
- top : 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
📖 입력
첫째 줄에는 1이상 10,000이하인 정수N이 주어지고 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다.
문제에 나와있지 않은 명령이 주어지는 경우는 없다.
📖 출력
출력해야하는 명령이 주어질때마다, 한 줄에 하나씩 출력한다.
첫번째.
입력 N은 반복되는 LOOP횟수를 의미한다.
N번 반복해 문자열(String)을 입력받는다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for(int i = 0; i < n; i++) {
String str = br.readLine();
}
두번째.
입력받은 문자열으 " "으로 나눠(split) 길이가 1인지, 2인지 구분해 push X와 그 외의 명령어를 구분해줘야 한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for(int i = 0; i < n; i++) {
String[] str = br.readLine().split(" ");
if(str.length != 1){ }
else { }
}
세번째.
한줄 씩 읽을때 문자열이 어떤 명령어를 의미하는지 확인해 봐야 한다.
📖 문자열 비교(boolean)
String str = '안녕하세요'
str.equals('안녕하세요')
true 또는 false 로 출력된다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for(int i = 0; i < n; i++) {
String[] str = br.readLine().split(" ");
if(str.length != 1){
// push명령어만 있을 경우에 해당
} else {
if(str[0].equals("pop")){
} else if(str[0].equals(""size""){
}
}
}
네번째.
빈 stack 생성 후, 명령어 맞게 수행.
📖 stack
// 스택 생성
Stack<Integer> stack = new Stack<>();
// 스택에 값 입력 push, add
stack.push(Integer);
stack.add(Integer);
// 스택에 가장 최근에 입력된 값 추출 pop
stack.pop()
// 스택에 가장 최근에 입력된 값 보기(추출하진 않고 비교 또는 확인하고자 할 때)
stack.peek()
// 스택이 비어있는지 확인하는 확인하는 boolean값
stack.isEmpty()
// 스택 사이즈(길이) 값
stack.size()
전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
for(int i = 0; i < n; i++) {
String[] str = br.readLine().split(" ");
String str1 = str[0];
if(str.length != 1) {
int x = Integer.parseInt(str[1]);
stack.push(x);
}
else {
if(str1.equals("pop") && stack.isEmpty())
System.out.println(-1);
else if(str1.equals("pop") && !stack.isEmpty())
System.out.println(stack.pop());
else if(str1.equals("size"))
System.out.println(stack.size());
else if(str1.equals("empty") && stack.isEmpty())
System.out.println(1);
else if(str1.equals("empty") && !stack.isEmpty())
System.out.println(0);
else if(str1.equals("top") && stack.isEmpty())
System.out.println(-1);
else if(str1.equals("top") && !stack.isEmpty())
System.out.println(stack.peek());
}
}
}
}
'알고리즘' 카테고리의 다른 글
자료구조 2주차_이진탐색과 재귀함수 (0) | 2022.11.24 |
---|---|
자료구조 2주차_어레이와 링크드리스트 (0) | 2022.11.24 |
자료구조 1주차_시간복잡도 & 공간복잡도 (0) | 2022.11.23 |
자료구조 1주차_알고리즘과 친해지기 (1) | 2022.11.23 |
백준 2231번 분해합 (0) | 2022.10.26 |