-
[구름에듀] 환상의 조합알고리즘 문제풀이/Python 2020. 2. 8. 21:32
문제
# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
ns = input()
ability = input()
number = ns.split(' ')[0]
result = ns.split(' ')[1] # 합
arrAbility = ability.split(' ')
cnt = 0
sum = int(arrAbility[0])
def choice(x, sum):
global result
global arrAbility
if(x < len(arrAbility)):
choice(x + 1, sum + int(arrAbility[x]))
choice(x + 1, sum)
else :
if(sum == int(result)) :
global cnt
cnt += 1
choice(1,sum)
print (cnt)
# 처음은 무조건 포함
# 이후 두 번째 부터는 선택과 비선택의 경우로 나누고, 마지막에 다 더했을 때의 값이 같은 경우 cnt++
해설
# -*- coding: utf-8 -*- # UTF-8 encoding when using korean ns = input() ability = input() number = ns.split(' ')[0] result = ns.split(' ')[1] # 합 arrAbility = ability.split(' ') cnt = 0 sum = int(arrAbility[0]) def choice(x, sum): global result global arrAbility if(x < len(arrAbility)): choice(x + 1, sum + int(arrAbility[x])) choice(x + 1, sum) else : if(sum == int(result)) : global cnt cnt += 1 choice(1,sum) print (cnt) # 처음은 무조건 포함 # 이후 두 번째 부터는 선택과 비선택의 경우로 나누고, 마지막에 다 더했을 때의 값이 같은 경우 cnt++
느낀 점
- 재귀를 통해 쉽게 해결가능한 문제였다.
'알고리즘 문제풀이 > Python' 카테고리의 다른 글
비트연산자와 비트마스크 (0) 2020.02.09 [프로그래머스 Level 1] K번째 수(map, sort, sorted) (0) 2020.02.06