Algorithm/백준 알고리즘
[백준 알고리즘 / JAVA] 10828번 스택
newtownboy
2023. 6. 27. 23:19
문제 정보
- 문제 링크: https://www.acmicpc.net/problem/10828
- 문제 번호: 10828번
- 문제 이름: 스택
- 문제 난이도: 실버 4
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
코드
import java.io.*;
class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
int[] stack = new int[count];
int top = -1;
for (int i = 0; i < count; i++) {
String[] input = br.readLine().split(" ");
switch (input[0]) {
case "push":
top++;
stack[top] = Integer.parseInt(input[1]);
break;
case "pop":
if (top == -1) {
System.out.println(-1);
break;
}
System.out.println(stack[top]);
top--;
break;
case "size":
System.out.println(top + 1);
break;
case "empty":
if (top == -1) {
System.out.println(1);
} else {
System.out.println(0);
}
break;
case "top":
if (top == -1) {
System.out.println(-1);
break;
}
System.out.println(stack[top]);
break;
}
}
}
}
풀이
Step1: 스택 초기화 및 연산 개수 입력받기
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
int[] stack = new int[count];
int top = -1;
- `BufferedReader`를 사용하여 입력을 받을 수 있는 준비를 합니다.
- `count`변수에 사용자로부터 입력받은 연산 개수를 저장합니다.
- `stack`배열을 int형으로 선언하고, 크기를 `count`만큼 할당합니다.
- `top`변수를 -1로 초기화합니다. 이 변수는 스택의 가장 위에 있는 원소의 인덱스를 가리킵니다.
Step2: 연산 수행
for (int i = 0; i < count; i++) {
String[] input = br.readLine().split(" ");
switch (input[0]) {
case "push":
top++;
stack[top] = Integer.parseInt(input[1]);
break;
case "pop":
if (top == -1) {
System.out.println(-1);
break;
}
System.out.println(stack[top]);
top--;
break;
case "size":
System.out.println(top + 1);
break;
case "empty":
if (top == -1) {
System.out.println(1);
} else {
System.out.println(0);
}
break;
case "top":
if (top == -1) {
System.out.println(-1);
break;
}
System.out.println(stack[top]);
break;
}
}
- `count`만큼 반복문을 수행하여 연산을 처리합니다.
- `br.readLine().split(" ")`을 사용하여 사용자로부터 입력받은 문자열을 공백을 기준으로 문자열을 나눕니다.
- `switch`문을 사용하여 입력된 연산의 종류에 따라 동작을 수행합니다.
- "push"인 경우
- `top`을 1증가시킨 후, `input[1]`값을 정수로 변환하여 `stack[top]`에 저장합니다.
- "pop"인 경우
- 스택이 비어있는지 확인하여 `top`이 -1인 경우에는 -1을 출력하고, 그렇지 않은 경우에는 `stack[top]`의 값을 출력한 후 `top`을 1 감소시킵니다.
- "size"인 경우
- 현재 스택에 저장된 원소의 개수를 출력합니다. `top`의 값이 최초에 -1로 저장했기 때문에 +1 연산을 수행하여 출력합니다.
- "empty"인 경우
- 스택이 비어있는지 확인하여 `top`이 -1인 경우에는 1을 출력하고, 그렇지 않은 경우에는 0을 출력합니다.
- "top"인 경우
- 스택이 비어있는지 확인하여 `top`이 -1인 경우에는 -1을 출력하고, 그렇지 않은 경우에는 `stack[top]`의 값을 출력합니다.
- "push"인 경우