알고리즘/문제풀이

[프로그래머스] 월간 코드 챌린지 시즌1 - 두 개 뽑아서 더하기 / python

SeongOnion 2020. 11. 9. 00:16
728x90

문제 설명

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

 

제한 사항

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

입출력 예

numbers result
[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

 

풀이

def solution(numbers):
    answer = []
    for n in range(len(numbers)):
        for m in range(n+1, len(numbers)):
            x = numbers[n] + numbers[m]
            if x not in answer:
                answer.append(x)
    
    return sorted(answer)

바로 생각난 풀이는 numbers 리스트에서 for를 중첩시켜 n과 n+1로 돌면서 모든 더한 값들을 구한 후, answer 리스트에 해당 값이 존재하지 않을 경우에만 append 후, sorted 해주는 것

 

소감

간단한 문제지만 for문을 중첩시킨다는 것에 거부감이 있었고, 다른 효율적인 코드가 없을까 했지만 다른 사람들도 대부분 같은 접근법으로 푼 것 같았다. 코딩테스트를 처음 준비하는 사람들에게 연습하기 좋은 문제였다.