코딩 테스트/Level 1

두 개 뽑아서 더하기

컴닥 2020. 10. 21. 00:10
반응형

두 개 뽑아서 더하기
월간 코드 챌린지 시즌1 
1861명 완료

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

 

코딩테스트 연습 - 두 개 뽑아서 더하기

 

programmers.co.kr

Python

def solution(numbers):
    return sorted(list(set(numbers[i] + numbers[j] for i in range(len(numbers)) for j in range(i + 1, len(numbers)))))
def solution(numbers):
    return sorted(list({numbers[i] + numbers[j] for i in range(len(numbers)) for j in range(i + 1, len(numbers))}))
solution = lambda numbers: sorted(list(set(numbers[i] + numbers[j] for i in range(len(numbers)) for j in range(i + 1, len(numbers)))))
# PEP8 위반이지만 작동합니다. 
# Always use a def statement instead of an assignment statement that binds a lambda expression directly to an identifier
def solution(numbers):
    answer = set()
    for i in range(len(numbers)):
        for j in range(i + 1, len(numbers)):
            answer.add(numbers[i] + numbers[j])
    return sorted(list(answer))

리스트 표현식 사용하기
https://dojang.io/mod/page/view.php?id=2285

sorted와 sort의 차이
https://inma.tistory.com/137

 

Java

import java.util.HashSet;

class Solution {
    public int[] solution(int[] numbers) {
        var result = new HashSet<Integer>();
        for (var i = 0; i < numbers.length; i++) {
            for (var j = i + 1; j < numbers.length; j++) {
                result.add(numbers[i] + numbers[j]);
            }
        }
        return result.stream().sorted().mapToInt(Integer::intValue).toArray();
    }
}

트리셋을 쓰면 이진 탐색 트리가 구현되므로 정렬도 자동으로 되지만.... 

import java.util.TreeSet;

class Solution {
    public int[] solution(int[] numbers) {
        var result = new TreeSet<Integer>();
        for (var i = 0; i < numbers.length; i++) {
            for (var j = i + 1; j < numbers.length; j++) {
                result.add(numbers[i] + numbers[j]);
            }
        }
        return result.stream().mapToInt(Integer::intValue).toArray();
    }
}

해시셋을 쓸 때보다 느린 이유가...... 

헐 리턴 타입을 바꿔도 통과가 되네요..

import java.util.TreeSet;

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