2026.09.03
소요 시간: 15분
시간 복잡도:
import java.util.Deque;
import java.util.ArrayDeque;
class Solution {
public int[] solution(int[] arr) {
int cur;
Deque<Integer> queue = new ArrayDeque<>();
for (int i = 0; i < arr.length; i++) {
cur = arr[i];
if (queue.isEmpty() || queue.peekLast() != cur) {
queue.offer(cur);
}
}
int[] answer = new int[queue.size()];
int idx = 0;
while (!queue.isEmpty()) {
answer[idx++] = queue.poll();
}
return answer;
}
}
시간 복잡도:
코드 분석
size 변수를 이용해서 이전에 넣었던 값과 비교해서 같으면 저장하지 않고, 다를 때에만 저장한다.
Array.copyOf를 사용해서 실제 사용하는 배열의 크기만큼 자른다.
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr) {
int[] temp = new int[arr.length]; // 최악의 경우(중복 없음) 크기
int size = 0; // 지금까지 담은 개수
for (int num : arr) {
// 비었거나 직전 값과 다를 때만 담음
if (size == 0 || temp[size - 1] != num) {
temp[size++] = num;
}
}
return Arrays.copyOf(temp, size); // 실제 크기만큼 잘라서 반환
}
}
Level 1 문제 치고는 난이도가 꽤 있는 것 같다는 생각이 들었다.
지금은 코딩 테스트를 하지 않은지 꽤 돼서 예전만 못하다고 생각했는데
예전에 풀지 못했던 문제를 생각보다 쉽게 풀었던 것을 보아
기복이 꽤 심한 편이라는 생각이 든다.
기복이 있음에도 큰 영향을 받지 않을 정도로 열심히 해야 할 것 같다.