백준 28278 스택 2 - JAVA

2025. 1. 23. 17:32·알고리즘/백준

17103 문제 링크


https://www.acmicpc.net/problem/28278

 

문제 설명


 

입출력


코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int order = Integer.parseInt(br.readLine());
        StringTokenizer st;
        Stack<Integer> stack = new Stack<>();
        StringBuilder sb = new StringBuilder();
        
        for(int i = 0; i < order; i++) {
            st = new StringTokenizer(br.readLine());
            
            int input = Integer.parseInt(st.nextToken());
            
            switch(input) {
                case 1:
                    int num = Integer.parseInt(st.nextToken());
                    stack.push(num);
                    break;
                case 2:
                    if(!stack.isEmpty()) {
                        sb.append(stack.peek()).append("\n");
                        stack.pop();
                    } else {
                        sb.append(-1).append("\n");
                    }
                    break;
                case 3:
                    sb.append(stack.size()).append("\n");
                    break;
                case 4:
                    if(stack.isEmpty()) {
                        sb.append(1).append("\n");
                    } else {
                        sb.append(0).append("\n");
                    }
                    break;
                case 5:
                    if(!stack.isEmpty()) {
                        sb.append(stack.peek()).append("\n");
                    } else {
                        sb.append(-1).append("\n");
                    }
                    break;
            }
        }
        bw.write(sb.toString());
        bw.flush();
    }
}
Colored by Color Scripter
cs

 

알고리즘 설명


문제 그대로 자료구조 중 스택(Stack)을 구현하는 코드를 작성하면 됩니다.
java.util 패키지는 Stack 클래스를 제공하여 스택기능을 수행할 수 있는 메서드를 제공합니다.
해당 패키지의 Stack 클래스를 활용하면 쉽게 풀 수 있다고 생각합니다.
해당 문제에서 활용된 메서드를 나열해보겠습니다.

  • push() : 스택의 맨 위에 요소를 추가합니다.
  • pop() : 스택의 맨 위에 있는 요소를 제거하고 반환합니다.
  • peek() : 스택의 맨 위에 있는 요소를 제거하지 않고, 반환합니다.
  • isEmpty() : 스택이 비었는지 여부를 확인합니다.
  • size() : 스택에 현재 들어 있는 요소의 개수를 반환합니다.

해당 메서드들을 잘 파악하고 있었다면, 문제는 어렵지 않게 해결할 수 있습니다.
다만, 여러개의 입력에 대한 출력이 많은 많큼, System.out이나 Buffer를 활용한 write를 각각의 출력에 모두 적용하기 보다는 StringBuilder를 활용하여 메모리 내에서 문자열을 모두 준비한 후, 한 번의 출력만 활용하여 I/O 연산의 횟수를 최소화한다면, 성능면에서 효율적일 것 같습니다.

입력마다 출력 적용
StringBuilder사용

코드 해석


Stack 자료구조를 하나 생성하고, Stack 클래스의 메서드들을 활용하여, switch문으로 입력 메서드에 대한 결과를 StringBuilder에 append합니다. 모든 입력이 종료되면 StringBuilder에 저장된 결과를 출력합니다.
 

'알고리즘 > 백준' 카테고리의 다른 글

백준 2346 풍선 터뜨리기 - JAVA  (0) 2025.01.27
백준 9184 신나는 함수 실행 - JAVA  (0) 2025.01.24
백준 17103 골드바흐 파티션 - JAVA  (2) 2025.01.22
백준 1929 소수 구하기 - JAVA  (1) 2025.01.21
백준 13241 최소공배수 - JAVA  (0) 2025.01.20
'알고리즘/백준' 카테고리의 다른 글
  • 백준 2346 풍선 터뜨리기 - JAVA
  • 백준 9184 신나는 함수 실행 - JAVA
  • 백준 17103 골드바흐 파티션 - JAVA
  • 백준 1929 소수 구하기 - JAVA
BIS's tech Blog
BIS's tech Blog
Welcome to Kanghyun's tech blog :)
  • BIS's tech Blog
    벼익숙의 기술 블로그
    BIS's tech Blog
  • 전체
    오늘
    어제
    • 분류 전체보기 (68)
      • 알고리즘 (54)
        • 백준 (45)
        • 프로그래머스 (9)
      • CS 스터디 (14)
        • CS - JAVA (11)
        • CS - DB (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    BFS
    완전탐색
    Baekjoon
    깊이 우선 탐색
    자료구조
    알고리즘 고득점 kit
    너비 우선 탐색
    Lv2
    동적 계획
    Top-Down
    CS
    DFS
    재귀
    dp
    백준
    프로그래머스
    java
    브루트포스
    백트래킹
    기술질문
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BIS's tech Blog
백준 28278 스택 2 - JAVA
상단으로

티스토리툴바