Algorithm/Baekjoon
자바 배열로 스택 구현해보기(백준 28278번 : 스택 2)
hyunipad
2023. 12. 7. 12:59
반응형
오늘은 백준 28278번 : 스택 2 리뷰입니다(매우 간단한 문제)
그냥 남들은 어떻게 구현했나 보려고 검색을 했는데 다들 컬렉션 프레임워크를 사용했더라고요.. 그래서 글을 남깁니다.
요즘 문제를 풀면서 느끼는 건데, 구현 그 자체보다 시간, 메모리 제한이 빡빡하게 걸려있는 것들이 어려움..
보통 그런 문제들은 정해진 알고리즘이 있긴 하던데, 예를 들어 어제는 에라토스테네스의 체 때문에 시간 엄청 잡아먹었음
모르는 채로 얼추 근접했긴 했었는데 아무튼 이번 문제는 구현만 하면 돼서 간단했다.
구현 방법은 명령의 수가 1,000,000으로 정해져 있기 때문에 배열을 크기를 고정시킬 수 있고,
배열을 만든 후 스택에 push(insert) 할 때마다 front라는 상수를 조절하는 방식으로 구현했다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.Buffer;
import java.util.ArrayList;
import java.util.List;
public class Number_1966 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
MakeStack stack = new MakeStack();
for(int i = 0 ; i < T ; i++) {
String[] NX = br.readLine().split(" ");
if(NX[0].equals("1")) {
stack.insert(Integer.parseInt(NX[1]));
}else if(NX[0].equals("2")) {
bw.write(String.valueOf(stack.pop()) + "\n");
}else if(NX[0].equals("3")) {
bw.write(String.valueOf(stack.getSize()) + "\n");
}else if(NX[0].equals("4")) {
bw.write(String.valueOf(stack.isEmpty()) + "\n");
}else if(NX[0].equals("5")) {
bw.write(String.valueOf(stack.getTop()) + "\n");
}
}
bw.flush();
bw.close();
br.close();
}
}
class MakeStack {
private int front;
private int size;
private int[] customStack;
public MakeStack() {
this.front = 0;
this.size = 0;
this.customStack = new int[1000001];
}
void insert(int a) {
size++;
customStack[++front] = a;
}
int pop() {
if(size == 0) {
return -1;
}else {
size--;
int pop = customStack[front];
customStack[front--] = 0;
return pop;
}
}
int getSize() {
return size;
}
int isEmpty() {
if(size == 0) {
return 1;
}else {
return 0;
}
}
int getTop() {
if(size == 0) {
return -1;
}else {
return customStack[front];
}
}
}
변수 및 메서드 명이나 size를 구하는 방식 등 리팩토링 해야 할 부분이 보이긴 하는데, 오늘은 저녁에 문제풀 시간이 없어서 점심시간 때 짬 내서 한거라 패스ㅎㅎ
반응형