정수 배열 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 = []
length = len(numbers)
for i in range(length - 1):
for j in range(i+1, length):
num = numbers[i] + numbers[j]
answer.append(num)
answer.sort()
answer = set(answer)
answer = list(answer)
return answer
을 생각했다.
그렇게 풀어본 결과..
테스트 케이스 실패.
def solution(numbers):
answer = set()
length = len(numbers)
for i in range(length - 1):
for j in range(i+1, length):
num = numbers[i] + numbers[j]
answer.add(num)
answer = list(answer)
answer.sort()
answer를 set로 미리 지정하고 값을 다 더한 이후에 list로 바꾸었다.
(참고로 set에서 append()와 같은 역할을 하는 함수는 add() 이다. 그리고 set에는 sort()를 지원하지 않는다.)
그랬더니 테스트케이스 모두 통과. 첫번째 풀이와 뭐가 다른걸까
def solution(numbers):
answer = []
length = len(numbers)
for i in range(length - 1):
for j in range(i+1, length):
num = numbers[i] + numbers[j]
if num not in answer:
answer.append(num)
answer.sort()
return answer
if num not in answer 를 쓰면 알아서 answer 이라는 list 내부를 찾아보는 듯 하다.. 처음에는 for 문을 돌려 aswer 안을 하나하나 일일히 뒤져보려 했는데 그럴 필요가 없었다 ㅎㅎ 파이썬 좋네.
하지만 테스트 7과 8에서 테스트 시간이 너무 오래 걸렸다. 리팩토링 필요.
from itertools import combinations def solution(numbers): answer = set() for i in list(combinations(numbers,2)): answer.add(sum(i)) return sorted(answer)
itertools 라이브러리의 combinations함수를 써서 풀이.