https://school.programmers.co.kr/learn/courses/30/lessons/43165
- numbers 원소를 차례대로 앞선 index값에다가 더하거나 빼주면서 큐에 넣는다.
- 더하거나 뺀 값과 index도 튜플 형태로 함께 넣어준다.
- index 끝까지 다 큐에 넣으면 이제 차례대로 popleft하면서 target과 해당 값이 일치하는지 확인한다.
from collections import deque
def solution(numbers, target):
answer = 0
queue = deque()
queue.append((numbers[0],0))
queue.append((-numbers[0],0))
while(queue):
num, i = queue.popleft()
i += 1
if i < len(numbers):
queue.append((num+numbers[i], i))
queue.append((num-numbers[i], i))
else:
if num == target:
answer += 1
return answer
- numbers 원소의 양수 값과 음수 값을 튜플 형태로 리스트에 넣어준다.
- product 함수를 통해 cartisian product을 구하고 각 집합의 합을 구한다.
- l 앞에 *을 붙여주는 이유는 리스트 안 원소를 하나씩 풀어줘야 해서.
- *연산을 수행하면 리스트 내부의 값들이 가변인자로 변함.
- 합과 target값이 동일한 것의 갯수를 return한다.
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)
'◦ Algorithm > Python' 카테고리의 다른 글
백준 2060 바이러스 DFS (0) | 2023.03.29 |
---|---|
프로그래머스 푸드 파이트 대회 문자열 뒤집기 (0) | 2023.03.28 |
백준 파이썬 4170 불 BFS (0) | 2023.03.26 |
11번가 괄호문제 dict update, replace (0) | 2023.03.26 |
백준 파이썬 1926 그림 BFS (0) | 2023.03.25 |