728x90
오늘의 문제는 프로그래머스
같은 숫자는 싫어
문제
문제 접근 및 풀이 과정
권장 풀이 시간은 30분이었고, 저는 77분이 걸렸습니다.
문제의 주요 키워드가 스택 및 큐 였기 때문에 이 부분에 중점을 두고 코드를 작성했습니다.
문제 접근 방식
큐는 요소를 직접적으로 참조할 수가 없기 때문에 배열의 인덱스를 큐에 복사한 후 poll() 메서드를 활용해 첫 번째 요소를 저장하고, 리스트를 추가로 사용해 중복된 값을 제거하고자 했습니다.
문제 풀이
import java.util.*;
import java.util.LinkedList;
import java.util.Queue;
public class Solution {
public int[] solution(int []arr) {
Queue<Integer> queue = new LinkedList<Integer>();
for(int i = 0; i < arr.length; i++) {
queue.add(arr[i]);
}
List<Integer> result = new ArrayList<>();
int prev = queue.poll();
result.add(prev);
while(!queue.isEmpty()) {
int current = queue.poll();
if(current != prev) {
result.add(current);
prev = current;
}
}
int[] answer = new int[result.size()];
for(int i = 0; i < result.size(); i++) {
answer[i] = result.get(i);
}
return answer;
}
}
큐 사용하기
큐를 사용한 이유는 데이터의 순차적 접근과 처리를 위해서 였습니다. 큐는 FIFO 구조로, 들어간 순서대로 데이터를 처리할 수 있어 문제의 연속된 숫자들을 중복 없이 처리하는 데 적합했습니다. 또한 큐는 데이터를 하나씩 꺼내 비교하기 때문에 중복된 데이터를 필터링하는 로직을 구현하기 수월할 것이라 생각했습니다.
리스트 사용하기
리스트를 사용한 이유는 중복을 제거한 데이터를 저장하고 이를 배열로 변환하기 좋을 것 같아서 였습니다. 리스트는 크기가 동적으로 조정되기 때문에, 데이터의 추가와 삭제가 용이하고 중복된 숫자를 제외한 새로운 데이터를 저장하는 데 적합할 것이라 생각했습니다.
리스트 배열로 반환하기
리스트에 저장된 중복이 제거된 숫자들을 배열로 변환하는 과정입니다.
result.size()를 통해 배열의 크기를 지정하고, result.get(i) 메서드를 사용해 각 인덱스에 해당하는 값을 배열에 할당했습니다. 이를 통해 결과를 int 배열 형태로 변환할 수 있었습니다.
이렇게 오늘 7일차 TIL을 작성해 보았습니다.
728x90
'🍪 Ect > #Study' 카테고리의 다른 글
[99클럽 코테 스터디] 9일차 TIL 힙 (0) | 2024.07.30 |
---|---|
[99클럽 코테 스터디] 8일차 TIL 스택/큐 (0) | 2024.07.29 |
[99클럽 코테 스터디] 6일차 TIL 해시 (0) | 2024.07.27 |
[99클럽 코테 스터디] 5일차 TIL 해시 (0) | 2024.07.26 |
[99클럽 코테 스터디] 4일차 TIL 문자열 (0) | 2024.07.25 |
댓글