728x90
이해하기
이전에 풀었던 백준 25556.포스택 문제보다는 이해가 됐다.
스택 관련 문제라고 하니 스택을 활용해야 할 것 같은데... 뭔가 감이 안 잡혀서 처음 풀 때는 ArrayList로 풀어버렸다.
스택을 활용해서 풀 방법을 찾아보자.
- 스택을 하나 생성한다.
- 스택이 비어있거나, 스택의 top에 있는 숫자(→ peek()으로 꺼내자!) 와 비교하여 같은 수가 아니라면 스택에 add()한다.
- 요구하는 반환형이 int[]이기 때문에 바꾸어주어야 한다.
- int 배열을 하나 만드는데, 사이즈는 앞에서 사용했던 스택의 사이즈로 한다.
- 새로 만든 배열에 스택의 숫자들을 옮긴다.
- 배열을 리턴한다.
문제 풀이
import java.util.Arrays;
import java.util.Stack;
class Solution3 {
public int[] solution(int[] arr) {
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < arr.length; i++) {
if (stack.isEmpty() || stack.peek() != arr[i]) {
stack.add(arr[i]);
}
}
int[] answer = new int[stack.size()];
for (int i = 0; i < answer.length; i++) {
answer[i] = stack.get(i);
}
return answer;
}
}
위에서 적었던 순서대로 작성해보았다.
중간에 약간 헷갈려서 stack.peek() != arr[i] 라고 적어야 하는 걸 stack.peek() < arr[i] 라고 적어버렸다.
for문을 더 줄일 수 있을 것 같아서 다시 작성해 보았다.
import java.util.Arrays;
import java.util.Stack;
class Solution3 {
public int[] solution(int[] arr) {
Stack<Integer> stack = new Stack<>();
for (int n : arr) {
if (stack.isEmpty() || stack.peek() != n) {
stack.add(n);
}
}
int[] answer = new int[stack.size()];
for (int i = 0; i < answer.length; i++) {
answer[i] = stack.get(i);
}
return answer;
}
}
음... 줄일 수 있을 줄 알았는데 막상 세보니 라인 수는 똑같다 ㅋㅋ... 그래도 더 깔끔한 것 같기는 하다.
'JAVA > Coding Test Study' 카테고리의 다른 글
[Gold III] 백준 - 2830. 행성 X3 : Java (0) | 2024.01.28 |
---|---|
[Silver V] 백준 - 24174. 알고리즘 수업 - 힙 정렬 2 : Java (0) | 2024.01.24 |
[Gold V] 백준 - 25556. 포스택 : Java (1) | 2024.01.19 |
[Bronze V] 백준 - 2393. Rook : Java (0) | 2023.12.19 |
[Bronze V] 백준 - 2377. Pottery : FreeBASIC (0) | 2023.12.19 |