본문 바로가기
Python/Programmers

[We-Co] 프로그래머스 - 소수 만들기(Python)

by 위기의코딩맨 2021. 7. 30.
반응형

안녕하세요. 위기의 코딩맨입니다.

앞으로 프로그래머스의 코딩 테스트 문제를 풀어보려고 합니다. 언어는 Python 기반으로 진행할 예정입니다.

오늘은 프로그래머스의 코딩 테스트 연습 Level 1 소수만들기를 진행해 보려합니다.

 

 

[출처]https://programmers.co.kr/learn/courses/30/lessons/12977

 

문제를 잘 이해하고, 입출력 예 설명을 잘 보고 코딩을 진행해야합니다.

일단 제가 진행한 소스를 보시겠습니다.

  

def solution():
    answer = 0
    for i in range(0, len(Array_)):
        num_1 = Array_[i]
        for j in range(i+1, len(Array_)):
            num_2 = Array_[j]
            for z in range(j+1, len(Array_)):
                num_3 = Array_[z]
                re_ = num_1 + num_2 + num_3
                if check(re_):
                    answer +=1
return answer

def check(a):
    sum = a
    for i in range(2, total):
        if sum %  i == 0 :

            return False
return True

 

제 코드는 들어오는 리스트를 토대로, for 문을 3번 사용하여 3개의 값을 설정하고, 

그 값들의 합을 check()로 보내, 소수 인지 확인을 하여, 소수이면 True, 소수가 아니면 False을 리턴하여

True면 answer+=1을 실행하게 됩니다.

이 방식을 계속 반복하여, 모든 for문이 완료되면 answer를 완료 값으로 return하여 종료합니다.

 

프로그래머스 결과
결과는 테스트가 모두 성공!다음으로 다른 사람들의 코드를 확인해보았습니다.

from functools import reduce
from itertools import combinations

 

def Find_Sosu_S():
    answer = 0
    A = list(combinations(Array_, 3)) 
    for i in A:
        num_ = reduce(lambda x, y: x + y, i)
        if check(num_): answer += 1
return answer

 

check부분은 소수를 확인하는 부분이라 제가 임의로 바꿔서 넣었습니다.!

여기서 중요한점은 A = list(combinations(Array_, 3)) 인데

3중 for문을 사용한것을 for문을 한번 사용할 수 있도록 줄인 부분입니다.

combinations로 3자리의 조합된 수를 리스트로 넣어줍니다.

 

Array_ = [1,2,3,4]

[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]

 

Array_를 넣고 돌리면 밑의 값이 결과로 나옵니다.

이 값들을 lambda의  reduce()함수를 사용하여 그 리스트들의 값을 모두 더하여 소수인지 확인하는 것입니다.

 

모든 소스들이 정답은 아니지만 효율이나, 가독성이 좋은 코드를 제작할 수 있도록 노력합시다..

 

 

반응형