본문 바로가기
🍪 Ect/#Study

[99클럽 코테 스터디] 7일차 TIL 스택/큐

by 개발한 너굴씨 2024. 7. 28.
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

댓글