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();
}
}
|
cs |
알고리즘 설명
문제 그대로 자료구조 중 스택(Stack)을 구현하는 코드를 작성하면 됩니다.
java.util 패키지는 Stack 클래스를 제공하여 스택기능을 수행할 수 있는 메서드를 제공합니다.
해당 패키지의 Stack 클래스를 활용하면 쉽게 풀 수 있다고 생각합니다.
해당 문제에서 활용된 메서드를 나열해보겠습니다.
- push() : 스택의 맨 위에 요소를 추가합니다.
- pop() : 스택의 맨 위에 있는 요소를 제거하고 반환합니다.
- peek() : 스택의 맨 위에 있는 요소를 제거하지 않고, 반환합니다.
- isEmpty() : 스택이 비었는지 여부를 확인합니다.
- size() : 스택에 현재 들어 있는 요소의 개수를 반환합니다.
해당 메서드들을 잘 파악하고 있었다면, 문제는 어렵지 않게 해결할 수 있습니다.
다만, 여러개의 입력에 대한 출력이 많은 많큼, System.out이나 Buffer를 활용한 write를 각각의 출력에 모두 적용하기 보다는 StringBuilder를 활용하여 메모리 내에서 문자열을 모두 준비한 후, 한 번의 출력만 활용하여 I/O 연산의 횟수를 최소화한다면, 성능면에서 효율적일 것 같습니다.


코드 해석
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 |
