[코딩테스트][프로그래머스] 두 개 뽑아서 더하기

김상욱·2024년 6월 24일

문제

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

JAVA 풀이

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
        Set<Integer> set = new HashSet<>();
        int[] answer={};
        for(int i=0;i<numbers.length-1;i++){
            for(int j=i+1;j<numbers.length;j++){
                set.add(numbers[i]+numbers[j]);
            }
        }
        
        //List<Integer> list=new ArrayList<>(set);
        //Collections.sort(list);
        
        //answer=list.stream().mapToInt(Integer::intValue).toArray();
        
        return set.stream().sorted().mapToInt(Integer::intValue).toArray();
    }
}

내 생각

  • 자바에 적응이 안되서 시간이 꽤 걸렸다...
  • 먼저 중복을 없애주면서 담기 위에 set를 사용해서 담고 set을 정렬을 위해 list로 변환시켜서 정렬시켜준다. 그런다음 배열로 내보내기 위해 list를 다시 스트림을 통해 int형 배열로 변환해서 반환한다.
  • +set에서 스트림을 통해 바로 정렬하고 int배열로 변환이 가능하다는 점을 알았다.
  • 풀이 시간 : 16분

Python 풀이

def solution(numbers):
    answer = []
    arr=list()
    for i in range(len(numbers)-1):
        for j in range(i+1,len(numbers)):
            arr.append(numbers[i]+numbers[j])
    answer=sorted(list(set(arr)))
    return answer

내 생각

  • 확실히 형변환 부분에서 파이썬이 압도적인거 같다.
  • 각 모든 경우의 수를 위해 이중 포문을 써서 모든 합의 경우를 구해준 후, 집합으로 한번 싸서 중복 제거해주고 정렬을 위해 다시 리스트로 바꿔준 후 정렬하면 된다.
  • 풀이 시간 : 3분

0개의 댓글