회고
이번에 문제에서 새로운 것을 알게 되었다. itertools의 combinations이다. 리스트안의 조합을 만들어주는 메서드로 내가 구현한 코드의 경우 for문을 이용해서 각 요소를 돌면서 조합을 만들었다면, combinations은 단순히 메서드만을 이용해서 바로 똑같은 코드를 구현할 수 있다.
파이썬에는 정말정말 다양한 메서드가 존재한다. 아는 만큼 사용할 수 있다고, 내가 특정 결과를 구현하기 위해서 10줄을 코딩했다면, 정말 똑같은 결과를 주는 기능을 가진 메서드를 사용하면 1,2줄이면 코딩할 수 있다.
직접코드를 구현하는 것이 나쁜것은 아니나, 이미 있는 좋은 메서드를 사용하지 않을 이유가 없다. 그러므로 잘 구현된 메서드나, 라이브러리 등에 대한 관심을 가질 필요성을 느꼈다.
풀이
https://school.programmers.co.kr/learn/courses/30/lessons/68644
def solution(numbers):
answer = []
for i in range(len(numbers)):
for j in range(i+1, len(numbers)):
temp = numbers[i]+ numbers[j]
if temp in answer:
continue
answer.append(temp)
answer.sort()
return answer
재미있는 itertools
from itertools import combinations
from itertools import permutations
from itertools import product
def solution(numbers):
answer = []
l = list(combinations(numbers, 3))
for i in l:
answer.append(i[0]+i[1])
answer = list(set(answer))
answer.sort()
return answer
numbers = [2,1,3,4,1]
a = solution(numbers)
test = [1,2,3,4,5]
test2 = ["A","B"]
test3 = [[1,2,3,4,5],["a","b","c","d","e"]]
result = list(combinations(test,2))
# [(1, 2), (1, 3), (1, 4), (1, 5),
# (2, 3), (2, 4), (2, 5),
# (3, 4), (3, 5),
# (4, 5)]
result = list(permutations(test,2))
# [(1, 2), (1, 3), (1, 4), (1, 5),
# (2, 1), (2, 3), (2, 4), (2, 5),
# (3, 1), (3, 2), (3, 4), (3, 5),
# (4, 1), (4, 2), (4, 3), (4, 5),
# (5, 1), (5, 2), (5, 3), (5, 4)]
result = list(product(test, test2))
#[(1, 'A'), (1, 'B'),
# (2, 'A'), (2, 'B'),
# (3, 'A'), (3, 'B'),
# (4, 'A'), (4, 'B'),
# (5, 'A'), (5, 'B')]
result = list(product(*test3))
#[(1, 'a'), (1, 'b'), (1, 'c'), (1, 'd'), (1, 'e'),
# (2, 'a'), (2, 'b'), (2, 'c'), (2, 'd'), (2, 'e'),
# (3, 'a'), (3, 'b'), (3, 'c'), (3, 'd'), (3, 'e'),
# (4, 'a'), (4, 'b'), (4, 'c'), (4, 'd'), (4, 'e'),
# (5, 'a'), (5, 'b'), (5, 'c'), (5, 'd'), (5, 'e')]