리그캣의 개발놀이터

[매일프로그래밍 / python 3] 양의 정수 배열과 정수 s가 주어졌을 때, 합이 s가 되는 원소들의 조합이 있는지 찾으시오. 본문

알고리즘/매일프로그래밍

[매일프로그래밍 / python 3] 양의 정수 배열과 정수 s가 주어졌을 때, 합이 s가 되는 원소들의 조합이 있는지 찾으시오.

리그캣 2020. 1. 28. 14:56

'''
양의 정수 배열과 정수 s가 주어졌을 때, 합이 s가 되는 원소들의 조합이 있는지 찾으시오.

Input: A = {7, 3, 2, 5, 8}, s = 14

Output: Yes(7, 2, 5)
'''

순열을 이용하여서 풀었다.

순열 : 중복 허용x

  • permutations중복을 허용하지 않는다.
from itertools import permutations
per = permutations(\["빨","주","노","초"\],2)  
print(list(per))  
#=> \[('빨', '주'), ('빨', '노'), ('빨', '초'), ('주', '빨'), ('주', '노'), ('주', '초'), ('노', '빨'), ('노', '주'), ('노', '초'), ('초', '빨'), ('초', '주'), ('초', '노')\]

이때 중요한 것은 중복을 허용하지 않아야 한다.

from itertools import permutations              


A = [7, 3, 2, 5, 8]                             
s = 14                                          

flag = False                                    

for i in range(1, len(A)+1):                    
    per = permutations(A, i)                    
    perList = list(per)                         
    for j in range(len(perList)):               
        if s == sum(perList[j]):                
            flag = True                         
            sucList = perList[j]                
            break                               
    if flag == True:                            
        break                                   

print(str(flag) + ":" + str(sucList))                                                

위의 코드에서 결과가 참이되었을때 2중 for문을 나오기 위해서 flag를 사용하였다.

동시에 flag는 해당하는 값이 존재하는지 알려주는 역할도 한다.

참고

https://ghwlchlaks.github.io/permutation-combination-python

Comments