mondegreen

[240324] 알고리즘 리부트 37일차 - 프로그래머스 두 개 뽑아서 더하기 자바 본문

알고리즘 풀이 및 리뷰/프로그래머스

[240324] 알고리즘 리부트 37일차 - 프로그래머스 두 개 뽑아서 더하기 자바

앙갱 2024. 3. 24. 20:25
반응형

문제를 분석하고 입력값과 연산 횟수를 고려해 의사코드를 작성하고 시간 복잡도를 고민한 다음 코드를 작성했다. 활용한 것은 TreeSet인데 이 Set은 선언할 때부터 오름차순으로 정렬해주고 first()와 pollFirst() 같은 메서드를 활용해 가장 작은 값을 확인하거나 꺼내주는 기능을 한다. 따라서 별도로 배열 정렬할 필요가 없다. 여기서 잠깐 놓친 것은 pollFirst() 매서드를 사용함으로써 set의 크기가 동적으로 변하는데 변수로 저장해두지 않고 반복문의 길이를 size()로 설정했던 것이다. 실수를 깨닫고 변수로 받아 정적으로 활용했다. 

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {       
        TreeSet<Integer> set = new TreeSet<>();
        
        for(int i = 0; i<numbers.length-1; i++)
            for(int j = i+1; j<numbers.length; j++){
                set.add(numbers[i]+numbers[j]);                
            }
               
        int[] answer = new int [set.size()];
        
        int len = set.size();
        
        for(int i = 0 ; i < len; i++){
            answer[i] = set.pollFirst();
        }
        
        return answer;
    }
}
반응형