Programmers Coding Quiz #1 두개뽑아서 더하기

김기욱·2020년 12월 23일
0

코딩테스트

목록 보기
1/68
post-custom-banner

문제

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

입출력 예 설명

입출력 예 #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):
    answer = []
    for i in range(len(numbers)):
        for v in range(i+1, len(numbers)):
            answer.append(numbers[i]+numbers[v])
    return sorted(list(set(answer)))

인덱스랑 이중 for문을 사용해서 돌려줍니다.
range가 5라고 가정하면

(0,1) (0,2) (0,3) (0,4)
(1,2) (1,3) (1,4)
(2,3) (2,4)
(3,4)

이런식으로 돌려줘야되므로 두번째 for문 range 설정은 코드와 같이 기입합니다.
다음으로 이러한 방식으로 완성된 리스트를 set으로 중복제거,
list로 list로 형변환, sorted로 '오름차순'정렬해줍니다.

다음과 같이 set comprehension을 사용해서 한줄로도 표현이 가능합니다.

def solution(numbers):
    return sorted(list({numbers[i]+numbers[v] for i in range(len(numbers)) for v in range(i+1, len(numbers))}))

그러나 이런 방식의 해답은 가독성이 떨어지므로 비추천합니다.

profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.
post-custom-banner

0개의 댓글