[파이썬] 프로그래머스 LV1 두개 뽑아서 더하기

청수동햄주먹·2023년 2월 5일
0

파이썬코딩테스트

목록 보기
7/35

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

삼총사를 복습할 수 있엇던 문제였다.

첫시도

from itertools import combinations

def solution(numbers):
    ans = []
    for x in combinations(numbers,2):
        if sum(x) not in ans:
            ans.append(sum(x))
    return sorted(ans)

성능 고민 없이 해보았는데 나온 결과가 시간이 너무 걸려서 이건 아닌 것 같음.. 이런 방식은 LV0 100문제를 풀 때 주로 사용했는데 LV0에선 리스트를 이용해서 성능 고민 없이 우선 해결 + 파이썬 적용이 목표였었다

dictionary 이용

from itertools import combinations

def solution(numbers):
    thisdict = dict()
    for x in combinations(numbers,2):
        sm = sum(x)
        thisdict[sm] = sm
    return sorted(thisdict.keys())

딕셔너리에 넣는 과정에서 중복되는 값은 제외되게 된다.

다른 사람의 풀이

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)))

itertools 에서 combinations를 import하지 않고 for-loop 으로 조합을 만들어주는 풀이이다. 그런데 제일 우수한 성능을 보여줌.
👉 2개를 뽑아서 만드는 조합은 for-loop으로만 하는게 나을 것 같음

성능 비교

테스트 1 〉	통과 (0.00ms, 9.89MB)	통과 (0.01ms, 10.1MB)	통과 (0.01ms, 10.2MB)
테스트 2 〉	통과 (0.02ms, 10.2MB)	통과 (0.01ms, 9.93MB)	통과 (0.01ms, 10.1MB)
테스트 3 〉	통과 (0.01ms, 10.3MB)	통과 (0.01ms, 10MB)	    통과 (0.01ms, 10.4MB)
테스트 4 〉	통과 (0.01ms, 10.1MB)	통과 (0.01ms, 10.1MB)	통과 (0.01ms, 10.2MB)
테스트 5 〉	통과 (0.03ms, 10.2MB)	통과 (0.02ms, 9.95MB)	통과 (0.02ms, 10.1MB)
테스트 6 〉	통과 (0.21ms, 9.97MB)	통과 (0.04ms, 10.4MB)	통과 (0.03ms, 10.1MB)
테스트 7 〉	통과 (4.65ms, 10.2MB)	통과 (0.97ms, 10.1MB)	통과 (0.43ms, 10.1MB)
테스트 8 〉	통과 (1.98ms, 10.2MB)	통과 (0.60ms, 10.2MB)	통과 (0.48ms, 10.2MB)
테스트 9 〉	통과 (0.49ms, 10MB)   	통과 (0.79ms, 10.1MB)	통과 (0.67ms, 10.3MB)
  • 첫번째 시도의 성능은 대체적으로 제일 느린데 테스트9에서 제일 빨랐다. 머지 ㅋㅋ
  • 딕셔너리 사용코드는 메모리사용이 적은 경향이 있었음
profile
코딩과 사별까지

0개의 댓글