https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
스택 자료구조를 만드는 문제이다.
자바에 원래 존재하는 Stack을 이용하지 않고 배열과 메소드를 이용해서 구현해보겠다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
// 다른 메소드에서도 사용할 수 있게 main 메소드 안에서 선언하지 않는다.
static int[] stack = new int[10000];
// 스택의 사이즈를 기록한다. 이를 통해 top을 알 수 있다.
static int size = 0;
public static void main(String[] args) throws IOException {
// 시간 단축을 위해 Scanner대신 BufferedReader를 이용한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// Test Case T
int T = Integer.parseInt(br.readLine());
for(int i=0; i<T; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String op = st.nextToken();
if(op.equals("push")) {
int element = Integer.parseInt(st.nextToken());
push(element);
}else if(op.equals("top")) {
sb.append(top()).append("\n");
}else if(op.equals("size")) {
sb.append(size()).append("\n");
}else if(op.equals("empty")) {
sb.append(empty()).append("\n");
}else {
sb.append(pop()).append("\n");
}
}
System.out.println(sb);
}
static int empty() {
if(size == 0)
return 1;
else
return 0;
}
static void push(int x) {
// 스택의 top에 x를 넣는다. 그리고 size를 늘려준다.
stack[size++] = x;
}
static int pop() {
// 만약 스택이 비어있다면 pop할 수 없으니 -1을 return 해준다.
if(empty() == 1)
return -1;
else
return stack[--size];
}
static int size() {
return size;
}
static int top() {
// 만약 스택이 비어있다면 top에 있는것이 없으니 -1을 return 해준다.
if(empty() == 1)
return -1;
else
return stack[size - 1];
}
}
'[JAVA] > 자바[JAVA] 백준' 카테고리의 다른 글
BOJ(백준 온라인 저지) 9012번 with 자바[JAVA] (0) | 2022.01.18 |
---|---|
BOJ(백준 온라인 저지) 9093번 with 자바[JAVA] (0) | 2022.01.18 |
BOJ(백준 온라인 저지) 2884번 - 단계별로 풀어보기 with 자바[JAVA] (0) | 2022.01.13 |
BOJ(백준 온라인 저지) 14681번 - 단계별로 풀어보기 with 자바[JAVA] (0) | 2022.01.12 |
BOJ(백준 온라인 저지) 2753번 - 단계별로 풀어보기 with 자바[JAVA] (0) | 2022.01.12 |