이번에는 itertoolscombinations를 이용해보았다.

...이걸 안 이상 무조건 써야만한다. 혼자 순열 조합을 구현하는건 그냥 스트레스일 뿐이다. 추상화된 메서드를 잘 이용해서 더 큰 문제를 간단하게 해결하는 것이 나의 역할이다!!!

그니까 괜히 더 어려운거 하려고 하면서 혼자 스트레스 받지말자.

안되는 어려운걸 붙잡고 늘어지는 것보다 내가 즐겁게 할 수 있는 일들을 찾아서 그것에 집중하는게 맞다. 안되는 어려운걸 하는게 재미가 있으면 하면 되지만, 안되는 어려운걸 이상한 의무감과 집착으로 붙잡고 늘어지는건 그냥 시간낭비고 스트레스고 하여튼 다 때려치우고만 싶게 만들지 도움이 안된다.


...문제를 풀어보자^^;

자연수 n이 주어질 때, n을 서로 다른 소수 3개의 합으로 표현하는 경우의 수를 return 하시오!

코드는 주석으로 설명한다.


from itertools import combinations

def solution(n):
    answer = 0
    
    # 먼저 n 이하의 소수를 알아내자.
    a = [False,False] + [True]*(n-1) #  왜 2가 아니고 1이지? -> 0부터 시작이니까
    
    primes = []    
    for i in range(2,n+1): # 2~n
        if a[i] == True: # 먼저 가장 작은 수를 소수 리스트에 추가하고,
            primes.append(i)
            # 그의 배수들을 제거해준다 (False)
            for j in range(2*i, n+1 ,i):
                a[j] = False
    
    
    # 알아낸 소수들이 들어있는 리스트에서 3가지를 뽑는 조합을 모두 구해서 리스트화 시킨다.
    # 이게 킬링 포인트다...이걸 모르면 정말 여기에서 피똥싸면서(...) for loop 중첩시켜야한다.
    result = list(combinations(primes,3))
    
    # 합이 n인지 확인한다.
    for r in result:
        if sum(r) == n:
            answer += 1
                        
                        
    return answer
profile
Frontend Developer, JamStack, Ethereum

0개의 댓글