[코딩테스트] 두 개 뽑아서 더하기, 큐를 배열에 옮기기 | 프로그래머스

Bluewave·2024년 5월 13일

코테공부_java

목록 보기
21/99
post-thumbnail

문제

✏️ 문제 바로가기

문제레벨정답률
두 개 뽑아서 더하기Lv.170%

My Code

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        PriorityQueue<Integer> queue = new PriorityQueue<>();
        
        for(int i = 0; i<numbers.length; i++){
            for(int j = i+1; j<numbers.length; j++){

                if(!queue.contains(numbers[i]+numbers[j])){
                    queue.add(numbers[i]+numbers[j]);
                }
                
            }
        }
        
        int[] answer = new int[queue.size()];
        int i = 0;
        while (!queue.isEmpty()) {
            answer[i++] = queue.poll();
        }
        
        return answer;
    }
}

우선순위 큐를 이용해서 result 값들을 저장하였다.
그리고 반복문의 중복을 통해서 두 가지 숫자를 뽑는 행위를 구현하였고, 큐에 저장된 값인지 여부를 확인하여 없을 경우에만 저장하도록 했다.

🤍 큐에 저장된 값인지 확인 : queue.contains()

여기까진 문제가 없었는데, 처음에 큐에 저장된 값을 배열로 옮길때 문제가 생겼다.
for(int i = 0; i<queue.size(); i++){}
이런 식으로 반복문을 만들어서 옮겼다.

그런데 뒷부분이 0으로 저장되는 이슈가 발생..했다.
알고보니 이런식으로 반복문 조건을 설정하면, queue.poll()을 할 경우 큐의 크기가 줄어들고, 반복문을 한 번 돌때마다 범위가 변하는 것.....
queue를 옮길 땐 다음 두 가지 방법 무조건 쓰기..

  1. 큐의 크기를 변수에 저장해서 그 변수로 반복문 조건 설정
  2. while(!queue.isEmpty())
profile
Developer's Logbook

0개의 댓글