반응형
스택의 기본적인 문제입니다.
1. Stack을 이용한 직접적인 풀이
2. 배열을 이용한 풀이
두 가지로 풀어보았습니다.
반복문을 if else if로 쓰시는 분들도 있는데 이렇게 문자열이 있을 경우에는 switch문이 더 깔끔해 보입니다. (주관적 의견)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Integer> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
while (N-- > 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
String s = st.nextToken();
switch (s) {
case "push":
stack.push(Integer.parseInt(st.nextToken()));
break;
case "pop":
if(stack.isEmpty()) {
sb.append(-1).append('\n');
break;
} else {
sb.append(stack.pop()).append('\n');
break;
}
case "size":
sb.append(stack.size()).append('\n');
break;
case "empty":
if(stack.isEmpty()) {
sb.append(1).append('\n');
break;
} else {
sb.append(0).append('\n');
break;
}
case "top" :
if(stack.isEmpty()) {
sb.append(-1).append('\n');
break;
} else {
sb.append(stack.peek()).append('\n');
break;
}
}
}
System.out.println(sb);
}
}
2. 배열을 이용해서 각각의 메서드를 정의해서 푸는 방식입니다.
import java.io.*;
import java.util.*;
public class Main {
public static int[] stack;
public static int size = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
stack = new int[N];
while ( N-- > 0) {
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);
}
public static void push(int K) {
stack[size] = K;
size++;
}
public static int pop() {
if(size == 0) {
return -1;
}
else {
int result = stack[size -1];
stack[size - 1] = 0;
size--;
return result;
}
}
public static int size() {
return size;
}
public static int empty() {
if(size == 0) {
return 1;
} else {
return 0;
}
}
public static int top() {
if(size == 0) {
return -1;
}
else {
return stack[size -1];
}
}
}
반응형
'백준 > Data Structures' 카테고리의 다른 글
백준 17608 자바 (0) | 2022.08.23 |
---|---|
백준 2161 자바 (0) | 2022.08.22 |
백준 4949 자바 (0) | 2022.08.22 |
백준 9012 자바 (0) | 2022.08.22 |
백준 10845 자바 (0) | 2022.08.19 |