{% embed url=“https://www.acmicpc.net/problem/10828” %}
Solution 1. ArrayList 이용
package practice.algorithm.stackqueue;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;/** * stack 직접 구현하기 * 19428 kb / 404 ms
* ArrayList 이용 * - remove(n) 사용시에는 값이 아니라 인덱스를 넣어야 한다. * */public class Bj10828_1 { private static List<Integer> stack = new ArrayList<>(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int totalNum = Integer.parseInt(br.readLine()); for (int i = 0; i < totalNum; i++) { String order = br.readLine(); String[] orders = order.split(" "); run(orders); } } private static void run(String[] orders) { switch (orders[0]) { case "push" : push(Integer.parseInt(orders[1])); break; case "pop" : System.out.println(pop()); break; case "size" : System.out.println(size()); break; case "empty" : System.out.println(empty()); break; case "top" : System.out.println(top()); break; } } public static void push(int n) { stack.add(n); } public static int pop() { if (empty() != 1) { int lastIdx = size() - 1; Integer num = stack.get(lastIdx); stack.remove(lastIdx); return num; } return -1; } public static int size() { return stack.size(); } public static int empty() { return stack.isEmpty() ? 1 : 0; } public static int top() { if (empty() != 1) { return stack.get(size()-1); } return -1; }}
Java
복사
Solution 2. 배열 이용
package practice.algorithm.stackqueue;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/** * stack 직접 구현하기 * 19920 kb / 356 ms
* 배열 활용 * */public class Bj10828_2 { private static int topIdx = -1; private static int[] stack; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int totalNum = Integer.parseInt(br.readLine()); stack = new int[totalNum]; for (int i = 0; i < totalNum; i++) { String order = br.readLine(); String[] orders = order.split(" "); run(orders); } } private static void run(String[] orders) { switch (orders[0]) { case "push" : push(Integer.parseInt(orders[1])); break; case "pop" : System.out.println(pop()); break; case "size" : System.out.println(size()); break; case "empty" : System.out.println(empty()); break; case "top" : System.out.println(top()); break; } } public static void push(int n) { stack[++topIdx] = n; } public static int pop() { if (empty() != 1) { Integer num = stack[topIdx]; topIdx--; return num; } return -1; } public static int size() { return topIdx+1; } public static int empty() { return topIdx < 0 ? 1 : 0; } public static int top() { if (empty() != 1) { return stack[topIdx]; } return -1; }}
Java
복사
Solution 3. Stack 자료형 이용
package practice.algorithm.stackqueue;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Stack;/** * stack 직접 구현하기 * 20832 kb / 372 ms
* Stack 자료형 활용 * */public class Bj10828_3 { private static final Stack<Integer> stack = new Stack<>(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int totalNum = Integer.parseInt(br.readLine()); for (int i = 0; i < totalNum; i++) { String order = br.readLine(); String[] orders = order.split(" "); run(orders); } } private static void run(String[] orders) { switch (orders[0]) { case "push" : push(Integer.parseInt(orders[1])); break; case "pop" : System.out.println(pop()); break; case "size" : System.out.println(size()); break; case "empty" : System.out.println(empty()); break; case "top" : System.out.println(top()); break; } } public static void push(int n) { stack.push(n); } public static int pop() { if (!stack.empty()) { return stack.pop(); } return -1; } public static int size() { return stack.size(); } public static int empty() { return stack.empty() ? 1 : 0; } public static int top() { if (!stack.isEmpty()) { return stack.peek(); } return -1; }}
Java
복사