[프로그래머스_Lv1] 두 개 뽑아서 더하기

Lee, Chankyu·2021년 10월 11일
0
post-thumbnail
post-custom-banner

두 개 뽑아서 더하기

문제링크

나의 풀이

#첫 번째 답안
def solution(numbers):
    answer = []
    sum = []
    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            sum.append(numbers[i] + numbers[j])

    answer = list(set(sorted(sum)))
    return answer

  • 이중반복문을 통해 numbers 요소들의 더하기 경우의 수를 모두 sum 리스트에 append 하였다. 처음 파이썬을 공부할 때 이중반복문을 통해 구구단을 구현하는 케이스와 동일하다고 생각해도 된다. sum의 중복되는 요소들은 set()함수를 통해 제거하였다. 나의 로직에 문제는 없다고 생각했는데 채점 시 테스트 케이스 4,5 에서 오답이 나왔다. 왜 그럴까... 한참을 생각하다 sorted() 함수를 가장 바깥으로 빼보기로 했다.
# 두 번째 답안
def solution(numbers):
    sum = []
    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            sum.append(numbers[i] + numbers[j])

    return sorted(list(set(sum)))
  • 정답이다. 추측해보면 테스트케이스 4, 5 에 음수 값이 input 된 것이 아닐까 싶다. 분명 문제에서는 0 이상만 input된다고 했으나, 사람들의 말을 들어보니 가끔 문제의 조건을 벗어나는 테스트 케이스가 있다고 한다. 사실 이 문제의 경우 문제의 조건과 상관없이 정렬을 가장 나중에 하는게 안전하다. 굳이 나의 잘못을 찾자면 set() 적용 후의 요소 정렬 기준을 잘 몰랐다는 것이다.

❗ 테스트를 해보았다. 위의 두 답안에 음수 값을 input 하여 결과값을 출력해 보았다.

# 첫 번째 답안
print(solution([1,-2,3,4,5])) 
# 출력값 : [1, 2, 3, 4, 5, 6, 7, 8, 9, -1]

#두 번째 답안
print(solution([1,-2,3,4,5])) 
# 출력값 : [-1, 1, 2, 3, 4, 5, 6, 7, 8, 9]

✅ sorted() 함수 이후에 set() 함수를 적용하면 음수 값이 가장 뒤로 위치하였다. 이 점은 key point로 잘 기억해두자!!!


다른 사람의 풀이

from itertools import combinations
def solution(numbers):
    return sorted(set(sum(i) for i in list(combinations(numbers, 2))))
  • 파이썬에서 순열, 조합을 구현하는 콤비네이션 내장함수를 사용하였다. 아직 이 부분은 학습하지 못한 부분이기 때문에 추후 학습 후 review하도록 하겠다.
profile
Backend Developer - "Growth itself contains the germ of happiness"
post-custom-banner

0개의 댓글