본문 바로가기
Python

[programmers] 소수만들기

by zenna 2022. 2. 14.
728x90

프로그래머스의 소수만들기 문제 풀이입니다. 문제는 링크를 통해 상세하게 확인하세요!

 

코딩테스트 연습 - 소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때

programmers.co.kr

 

문제를 풀기 위해서는 범위 내의 소수를 가지고 있는 리스트가 필요합니다. 

소수를 담은 리스트 만드는 법은 아래 링크를 통해 확인하세요!

아래 코드에서는 sosu_list()를 통해 예제에서 만들 수 있는 가장 큰 숫자인 (1000+999+998)까지의

소수를 모두 가진 리스트를 얻어냅니다.

 

소수를 리스트에 입력하기

find_until 은 소수를 어디까지 찾을 지, 아래 코드블럭에서는 100으로 지정 결과 리스트는 result def sosu_list(find_until): result = [2, 3, 5] i = 6 while i < find_until: # i는 6에서 find_until까지 증가..

zenna9.tistory.com

 

이제 문제풀이입니다! 코드를 먼저 보겠습니다

sosu = sosu_list(1000+999+998)

nums = [1,2,7,6,4]
nums.sort()
nums_len = len(nums)

count_can_sosu = 0
for a in range(0, nums_len) :
    for b in range(a+1, nums_len) :
        for c in range(b+1, nums_len):
            summ = nums[a]+nums[b]+nums[c]
            if sosu.count(summ) == 1 :
                # summ 이 소수 리스트인 nums에 몇개 있는지 반환. 0이면 소수가 아님
                count_can_sosu += 1
print('경우의 수 : ',count_can_sosu)

코드가 진행되는 상황을 확인하고 싶은 분들은 아래의 더보기를 클릭하여 나오는 코드를 실행시키면 됩니다.

더보기

 

sosu = sosu_list(1000+999+998)

nums = [1,2,7,6,4]
nums.sort()
nums_len = len(nums)

count_can_sosu = 0
for a in range(0, nums_len) :
    print("a는 ",nums[a])
    for b in range(a+1, nums_len) :
        print("b는 ",nums[b])
        for c in range(b+1, nums_len):
            print("c는 ",nums[c])
            summ = nums[a]+nums[b]+nums[c]
            print("합계는 ",summ)
            if sosu.count(summ) == 1 :
                # summ 이 소수 리스트인 nums에 몇개 있는지 반환. 0이면 소수가 아님
                count_can_sosu += 1
                print("경우의수 추가가 되나? : ", count_can_sosu)
            print("==========")
print('경우의 수 : ',count_can_sosu)
print(nums.count(sosu))

코드의 for 문은 아래 내용을 의미합니다.

nums가 [0, 1, 2, 3, 4] 라고 가정하면 아래 순서로 코드가 진행됩니다.

 

 

programmers에 제출하기 위해 def로 정리하면 다음과 같겠네요.

sosu = sosu_list(1000+999+998)
nums = [1,2,7,6,4]

def solution(nums):
    nums.sort()
    nums_len = len(nums)

    count_can_sosu = 0
    for a in range(0, nums_len) :
        for b in range(a+1, nums_len) :
            for c in range(b+1, nums_len):
                summ = nums[a]+nums[b]+nums[c]
                if sosu.count(summ) == 1 :
                    # summ 이 소수 리스트인 nums에 몇개 있는지 반환. 0이면 소수가 아님
                    count_can_sosu += 1
    return count_can_sosu

print(solution(nums))
728x90

'Python' 카테고리의 다른 글

Python 이론 정리  (0) 2022.06.23
소수를 리스트에 입력하기  (0) 2022.02.13
돈을 거슬러주고, 로또 번호 주기  (0) 2022.02.07

댓글