728x90
반응형
1. 문제 설명
2. 풀이과정
각 수마다 -, + 두 가지 경우의 수가 존재한다. 따라서 총 (2 ** 숫자의 개수) 가지의 경우의 수가 나온다.
하여 모든 경우의 수를 구하고 이를 하나씩 확인하여 각 수의 합을 구한 뒤, 해당 합이 타겟 넘버와 같은지 비교하는 방식으로 문제를 해결하였다.
- 각 경우의 수를 구할 때 appendleft() 함수를 사용하기 위해 deque 모듈을 불러온다. from collections import deque
- 모든 경우를 저장할 리스트를 생성한다. graph = list()
- 모든 경우를 구할 때는 각 수를 2진수로 변환한 값을 저장하는 방식으로 구하였다. 하여 0부터 수를 하나씩 추출하여 for i in range(2 ** len(numbers))
- 해당 수의 2진수 변환 결과를 저장할 deque을 생성하고 d = deque()
- 해당 수가 0이 될 때까지 반복하며 while (i > 0)
- 해당 수를 2로 나눈 나머지를 추가하고 d.append(i % 2)
- 해당 수를 2로 나눈 몫을 새로 저장한다. i //= 2
- 2진수로 변환한 결과는 거꾸로 저장되기 때문에 순서를 뒤바꿔주고 d.reverse()
- 숫자의 개수만큼 자리를 채우기 위해 앞에 0을 채운다. while (len(d) < len(numbers)): d.appendleft(0)
- 2진수 변환 결과를 리스트에 추가한다. graph.append(d)
- 모든 경우의 수를 구했으면 각 경우를 하나씩 추출하여 각 경우를 확인한다. for i in graph
- 각 경우마다 합을 저장할 변수를 생성하고 초기화한다. num = 0
- 각 경우의 결과를 하나씩 추출하여 for j in range(len(i))
- 만약 결과가 0이면 뺄셈을 계산하고 if (i[j] == 0): num -= numbers[j]
- 결과가 1이면 덧셈을 계산한다. else: num += numbers[j]
- 해당 경우의 모든 결과를 확인한 뒤, 만약 계산 결과가 타겟 넘버랑 일치하면 if (num == target)
- 방법의 수를 1 증가시킨다. answer += 1
반응형
3. 소스코드
from collections import deque
def solution(numbers, target):
answer = 0
graph = list()
for i in range(2 ** len(numbers)):
d = deque()
while (i > 0):
d.append(i % 2)
i //= 2
d.reverse()
while (len(d) < len(numbers)):
d.appendleft(0)
graph.append(d)
for i in graph:
num = 0
for j in range(len(i)):
if (i[j] == 0):
num -= numbers[j]
else:
num += numbers[j]
if (num == target):
answer += 1
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 최고의 집합 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.04 |
---|---|
[프로그래머스] 전화번호 목록 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.03 |
[프로그래머스] 덧칠하기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.02 |
[프로그래머스] 실패율 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.01 |
[프로그래머스] 이중우선순위큐 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.30 |
[프로그래머스] 정수 삼각형 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.29 |
[프로그래머스] 피로도 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.28 |
[프로그래머스] [1차] 뉴스 클러스터링 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.27 |