스택을 입문하기 좋은 매우 쉬운 문제다!
필자는 3년 전 C++로 코딩테스트 문제를 많이 풀었을 때, 거의 대부분 배열을 stack, vector으로 구현했었다.
그래서 그런지 오랜만에 회고하는데도 큰 무리 없이 쉽게 푼 것 같다!
메모리 제한과 시간제한은 충분하다고 판단했다!
나의 구현 로직이다
1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000) -> push
2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다. -> pop
3: 스택에 들어있는 정수의 개수를 출력한다. -> size
4: 스택이 비어있으면 1, 아니면 0을 출력한다. -> empty
5: 스택에 정수가 있다면 맨 위의 정수를 출력한다. 없다면 -1을 대신 출력한다. -> peek
for 문 사용, 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> s = new Stack<>();
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
switch(Integer.parseInt(st.nextToken())) {
case 1:
s.push(Integer.parseInt(st.nextToken()));
break;
case 2:
if (!s.empty())
System.out.println(s.pop());
else
System.out.println(-1);
break;
case 3:
System.out.println(s.size());
break;
case 4:
if (s.empty())
System.out.println(1);
else
System.out.println(0);
break;
case 5:
if (!s.empty())
System.out.println(s.peek());
else
System.out.println(-1);
break;
default:
break;
}
}
}
}
배운점
오랜만에 스택 알고리즘을 회고하는 문제였다! 차차 큐나 덱도 공부하면서 회고해야겠다고 생각했다!
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 JAVA] 1427 - 소트인사이드 (1) | 2024.12.09 |
---|---|
[백준 JAVA] 2751 - 수 정렬하기2 (1) | 2024.12.08 |
[백준 JAVA] 25305 - 커트라인 (0) | 2024.12.08 |
[백준 JAVA] 2587 - 대표값2 (0) | 2024.12.08 |
[백준 JAVA] 2750 - 수 정렬하기 (0) | 2024.12.08 |