오늘은 문제를 주어진 시간 안에 다 풀지 못하고 다른 분들이 올려주신 코드를 리뷰하게 되었습니다.
코드에서 사용되는 함수가 유용하고 알고리즘이 간단하다는 점에서 향후 문제를 풀 때 도움이 될 것 같습니다.
그래서 기록용으로 게시글을 올렸습니다.
문제는 아래와 같습니다.
https://programmers.co.kr/learn/courses/30/lessons/43165
코드는 다음과 같습니다.
출처: https://programmers.co.kr/learn/courses/30/lessons/43165/solution_groups?language=python3
from itertools import product
def solution(numbers, target):
l = [(x, -x) for x in numbers]
s=list(map(sum,product(*l)))
return s.count(target)
solution([1,1,1,1,1],3)
풀이과정
설명을 위해 중간에 print 함수를 추가했습니다.
from itertools import product
def solution(numbers, target):
l = [(x, -x) for x in numbers]
s = list(product(*l))
ss=list(map(sum,product(*l)))
print(l)
print(s)
print(ss)
return ss.count(target)
solution([1,1,1,1,1],3)
[1,1,1,1,1]을 numbers로, 3을 target으로 할 때, solution 함수의 print(l), print(s), print(ss), 결과값은 아래와 같습니다.
- print(l)을 통해 numbers의 각 숫자와 마이너스 형태를 취한 숫자를 튜플 형태로 나타냈습니다.
- list(product(*l))을 통해 (1,1,1,1,1) 부터 (-1,-1,-1,-1,-1) 까지 1과 -1로 구성할 수 있는 배열을 튜플 형태로 나타냈습니다.
- 마지막으로 map과 sum 함수를 이용해 앞에서 구한 배열을 합쳤습니다. 예를 들면, (1,1,1,1,1)은 5가 되는 것입니다.
- 결과값으로 ss에서 target인 개수를 반환했습니다.
'Python' 카테고리의 다른 글
[알고리즘] DFS에 대해서 알아봅시다. - I am yumida (0) | 2021.12.31 |
---|---|
[알고리즘] BFS에 대해 알아봅시다. - I am yumida (0) | 2021.12.30 |
[백준] 1로 만들기-I am yumida (0) | 2021.12.27 |
다이나믹 프로그래밍 설명 - 이코딩, 파이썬 알고리즘 인터뷰 참고-I am yumida (0) | 2021.12.27 |
[프로그래머스] 더 맵게-I am yumida (0) | 2021.12.24 |