[python]두 개 뽑아서 더하기

eunvi·2021년 12월 21일
0

프로그래머스

목록 보기
18/25
post-thumbnail

월간 코드 챌린지 시즌1>두 개 뽑아서 더하기

[문제 설명]
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.


[제한사항]

  • numbers의 길이는 2 이상 100 이하입니다.
    • numbers의 모든 수는 0 이상 100 이하입니다.

[입출력 예]

[입출력 예 설명]

입출력 예 #1

2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
3 = 2 + 1 입니다.
4 = 1 + 3 입니다.
5 = 1 + 4 = 2 + 3 입니다.
6 = 2 + 4 입니다.
7 = 3 + 4 입니다.
따라서 [2,3,4,5,6,7] 을 return 해야 합니다.


입출력 예 #2

2 = 0 + 2 입니다.
5 = 5 + 0 입니다.
7 = 0 + 7 = 5 + 2 입니다.
9 = 2 + 7 입니다.
12 = 5 + 7 입니다.
따라서 [2,5,7,9,12] 를 return 해야 합니다.

나의 풀이

생각해보기!

def solution(numbers):
    from itertools import combinations as cb
    
    answer = []
    
    for i,j in cb(numbers,2):
        if i+j not in answer:
            answer.append(i+j)
        
    return sorted(answer)
  • 리스트에 있는 값들의 모든 조합을 구하기 위해 파이썬 기본 라이브러리인 itertools의 combinations를 사용했다.
  • if..not in..으로 answer에 없는 원소의 합 조합만 추가되도록 했다.

이전에 조합을 활용한 문제 풀이 방법을 떠올려 쉽게 풀었다!😊

다른 사람의 풀이 #1

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

참고하세요!

  • i와 j가 리스트에서 서로 다른 원소를 선택할 수 있도록 for문을 작성했다.
  • append()로 모든 경우의 수의 합을 받고 set()으로 중복을 없애주었다.

다른 사람의 풀이 #2

from itertools import combinations

def solution(numbers):
    answer = []
    l = list(combinations(numbers, 2))

    for i in l:
        answer.append(i[0]+i[1])
    answer = list(set(answer))
    answer.sort()

    return answer

참고하세요!

  • 라이브러리를 활용하여 원소 2개의 조합을 l에 받았다.
  • for문으로 모든 경우의 수의 합을 받고 set()으로 중복을 없앴다.

다른 사람의 풀이 #3

def solution(numbers): return sorted({numbers[i] + numbers[j] for i in range(len(numbers)) for j in range(len(numbers)) if i>j})

참고하세요!

  • 한 줄로 표현한 풀이!
  • i>j 라는 조건을 주어 경우의 수의 중복을 막았다.
profile
please study

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN