[Study] lv.1 두 개 뽑아서 더하기(68%)

ayboori·2023년 7월 31일
0

Java Study

목록 보기
21/34

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/68644

풀이 로직

1. 이중 for문을 이용하여 i번째 인덱스 하나 당 i+1번째 ~ 마지막 인덱스 비교
2. `contains()` 를 이용하여 두 수의 합이 이미 List에 있는 값이 아니라면 List에 추가
3. `Collections.sort()`를 이용하여 List 정렬
4. for문을 돌면서 배열로 변환 후 리턴

내가 작성한 코드

import java.util.ArrayList;
import java.util.Collections;

class Solution {
    public int[] solution(int[] numbers) {
        // 두 수의 합을 담을 가변 크기의 콜렉션 생성
        ArrayList<Integer> sums = new ArrayList<>();
        
        // i번째 인덱스 하나 당 i+1번째 ~ 마지막 인덱스 비교
        for(int i = 0 ; i< numbers.length-1 ; i++){
            for(int j = i+1 ; j < numbers.length; j++){
                // 두 수의 합이 이미 List에 있는 값이 아니라면 List에 추가
                if(!sums.contains(numbers[i]+numbers[j])){
                     sums.add(numbers[i]+numbers[j]);                         
                }           
            }
        }
        
        // List 내의 값 오름차순 정렬
        Collections.sort(sums);
        
        // ArrayList > 배열 변환
       int[] answer = new int[sums.size()];
        for (int i = 0 ; i < sums.size() ; i++) 
            answer[i] = sums.get(i).intValue();
        
        return answer;
    }
}

실행 시간

0.19ms ~ 4.68ms

테스트 1 〉	통과 (0.19ms, 77.2MB)
테스트 2 〉	통과 (0.24ms, 73.9MB)
테스트 3 〉	통과 (0.33ms, 75.6MB)
테스트 4 〉	통과 (0.22ms, 75.4MB)
테스트 5 〉	통과 (0.56ms, 77MB)
테스트 6 〉	통과 (1.13ms, 76.4MB)
테스트 7 〉	통과 (4.68ms, 80.7MB)
테스트 8 〉	통과 (1.99ms, 75.2MB)
테스트 9 〉	통과 (1.27ms, 74.1MB)

배운 것

  1. 배열 정렬 참조
  2. 리스트 정렬 참조
  3. 콜렉션 타입 > 기본 타입 배열 참조
  4. List에 특정 값 포함 여부 검사 참조

다른 사람의 풀이 - TreeSet 활용

설명, 함수 참조
add만 수행해도 저장 시 오름차순으로 저장되어 정렬을 따로 할 필요가 없다.

profile
프로 개발자가 되기 위해 뚜벅뚜벅.. 뚜벅초

0개의 댓글