본문 바로가기
Algorithm/Baekjoon

자바 배열로 스택 구현해보기(백준 28278번 : 스택 2)

by hyunipad 2023. 12. 7.
반응형

오늘은 백준 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를 구하는 방식 등 리팩토링 해야 할 부분이 보이긴 하는데, 오늘은 저녁에 문제풀 시간이 없어서 점심시간 때 짬 내서 한거라 패스ㅎㅎ

 

반응형

댓글