문제
백준 10828 [스택]
문제 링크: https://www.acmicpc.net/problem/10828
해결 방법
- push, pop 메소드를 제공하는 Deque 사용
- switch-case문을 사용하여 스택 명령어 처리
- push X: 스택에 값을 추가
- pop: 스택에서 최상위 값을 제거하고 출력 / 스택이 비어있으면 -1을 출력
- size: 스택의 크기를 출력
- empty: 스택이 비어있는지 여부를 1(비어있음) 또는 0(비어있지 않음)으로 출력
- top: 스택의 최상위 값을 출력 / 스택이 비어있으면 -1을 출력
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Deque<Integer> stack = new ArrayDeque<>();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
String command = br.readLine();
StringTokenizer st = new StringTokenizer(command);
switch (st.nextToken()) {
case "push":
int value = Integer.parseInt(st.nextToken());
stack.push(value);
break;
case "pop":
sb.append(stack.isEmpty() ? -1 : stack.pop()).append("\n");
break;
case "size":
sb.append(stack.size()).append("\n");
break;
case "empty":
sb.append(stack.isEmpty() ? 1 : 0).append("\n");
break;
case "top":
sb.append(stack.isEmpty() ? -1 : stack.peek()).append("\n");
break;
}
}
System.out.print(sb);
}
}
- 참고할 다른 풀이 방법
더보기
ArrayList로 직접 구현
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// ArrayList를 사용하여 스택을 구현
ArrayList<Integer> stack = new ArrayList<>();
int N = Integer.parseInt(br.readLine()); // 명령어의 수
for (int i = 0; i < N; i++) {
String[] command = br.readLine().split(" ");
switch (command[0]) {
case "push":
int value = Integer.parseInt(command[1]);
stack.add(value); // 스택의 끝에 추가
break;
case "pop":
if (stack.isEmpty()) {
sb.append("-1\n");
} else {
sb.append(stack.remove(stack.size() - 1)).append("\n"); // 마지막 요소 제거 및 출력
}
break;
case "size":
sb.append(stack.size()).append("\n");
break;
case "empty":
if (stack.isEmpty()) {
sb.append("1\n");
} else {
sb.append("0\n");
}
break;
case "top":
if (stack.isEmpty()) {
sb.append("-1\n");
} else {
sb.append(stack.get(stack.size() - 1)).append("\n"); // 마지막 요소 출력
}
break;
}
}
System.out.print(sb);
}
}
- while문 활용
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Deque<Integer> stack = new ArrayDeque<>();
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
StringTokenizer st;
while(N-- > 0){
st = new StringTokenizer(br.readLine());
String exec = st.nextToken();
if(exec.equals("push")) {stack.push(Integer.parseInt(st.nextToken()));
continue;
}
else if(exec.equals("pop")) sb.append(stack.isEmpty() ? -1 : stack.pop());
else if(exec.equals("size")) sb.append(stack.size());
else if(exec.equals("empty")) sb.append(stack.isEmpty() ? 1 : 0);
else sb.append(stack.isEmpty() ? -1 : stack.peek());
sb.append('\n');
}
System.out.println(sb);
}
}
'개발 공부 > 코딩테스트' 카테고리의 다른 글
99클럽 코테 스터디 16일차 TIL - 스택/큐 (1) | 2024.11.12 |
---|---|
99클럽 코테 스터디 15일차 TIL - 스택/큐 (0) | 2024.11.11 |
99클럽 코테 스터디 11일차 TIL - 해시 (1) | 2024.11.08 |
99클럽 코테 스터디 10일차 TIL - 해시 (1) | 2024.11.06 |
99클럽 코테 스터디 9일차 TIL - 문자열, 해시 (0) | 2024.11.05 |