본문 바로가기

Algorithm/[BOJ] - JAVA

[백준] 10828 : 스택 JAVA 풀이

 

ArrayList를 사용해서 풀어봤는데 뭔가..... 비효율적인 것 같아서 다른 방식으로도 풀어봤다.

코드의 길이는 큰 차이가 없지만 실행 시간에서 두 배나 차이가 나더라 하하하

 

import java.io.*;
import java.util.*;

public class Main {
	static ArrayList<Integer> stack = new ArrayList<Integer>();
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int N = Integer.parseInt(br.readLine());
		
		for(int i=0;i<N;i++) {
			st = new StringTokenizer(br.readLine(), " ");
			
			if(st.countTokens()==2) {
				st.nextToken();
				push(Integer.parseInt(st.nextToken()));
			}
			else {
				String command = st.nextToken();
				
				if(command.equals("pop")) pop();
				else if(command.equals("size")) size();
				else if(command.equals("empty")) empty();
				else if(command.equals("top")) top();
			}
			
		}
	}
	
	static void push(int x) {
		stack.add(x);
		return;
	}
	
	static void pop() {
		if(stack.isEmpty()) {
			System.out.println(-1);
			return;
		}
		System.out.println(stack.get(stack.size()-1));
		stack.remove(stack.size()-1);
		return;
	}
	
	static void size() {
		System.out.println(stack.size());
		return;
	}
	
	static void empty() {
		if(stack.isEmpty()) {
			System.out.println(1);
			return;
		}
		System.out.println(0);
		return;
	}
	
	static void top() {
		if(stack.isEmpty()) {
			System.out.println(-1);
			return;
		}
		System.out.println(stack.get(stack.size()-1));
		return;
	}
}

 

import java.io.*;
import java.util.*;

public class Main {
	static int[] stack;
    // 스택의 사이즈를 0으로 초기화
	static int size = 0;
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int N = Integer.parseInt(br.readLine());
		// 명령어의 개수만큼 배열을 만들어둠
		stack = new int[N];
		
		StringBuilder sb = new StringBuilder();
		
		for(int i=0;i<N;i++) {
			st = new StringTokenizer(br.readLine(), " ");
			
            // 입력되는 명령어에 따라 다른 문장을 실행하는 스위치문
			switch(st.nextToken()) {
			
			case "push":
				push(Integer.parseInt(st.nextToken()));
				break;
				
			case "pop":
				sb.append(pop()).append('\n');
				break;
				
			case "size":
				sb.append(size()).append('\n');
				break;
				
			case "empty":
				sb.append(empty()).append('\n');
				break;
				
			case "top":
				sb.append(top()).append('\n');
				break;
			}
			
		}
		System.out.println(sb);
	}
	
	static void push(int x) {
		stack[size] = x;
		size++;
		return;
	}
	
	static int pop() {
		if(size==0) {
			return -1;
		}
		
		int tmp = stack[size-1];
		stack[size-1] = 0;
		size--;
		return tmp;
	}
	
	static int size() {
		return size;
	}
	
	static int empty() {
		if(size==0) {
			return 1;
		}
		return 0;
	}
	
	static int top() {
		if(size==0) {
			return -1;
		}
		return stack[size-1];
	}
}