본문 바로가기
Programmers/Python

[Python] 프로그래머스 :: 소수 만들기

by Sin_ 2021. 10. 7.
728x90

안녕하세요 뚜디 입니다 :)

코딩테스트 연습 - 소수 만들기 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr

< 프로그래머스 - 소수 만들기 (LV1) >


1. 연습 문제

2. 문제 풀기

3. 소스 코드

4. 결과


1. 연습 문제
  • 문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
  • 제한 조건
nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
  • 입출력 예
nums result
[1,2,3,4] 1
[1,2,7,6,4] 4

 

2. 문제 풀기
입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.
입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.

1. 입력받은 리스트 인자 3개를 더한값을 임시로 만든 temp 리스트 변수에 담는다.
2. temp 인자값을 순서대로 소수 체크를 하여 flag를 통해 answer(count)를 확인하여 리턴한다.

-> 1번과정을 하게되면 중복된 숫자가 나올수있어
#temp_set = set(temp) #temp_list = list(temp_set) 이 과정을 통해 중복된 인자값을 제거했으나
이렇게되면 오히려 통과를 하지 못하는 상황이 발생하게된다.
중복된 인자값까지 소수 체크를하여 총 소수의 갯수를 리턴해야하는 문제이다.
(문제에 명시되어있지않아 문제제기해야할 부분일듯 싶네요...)

 

3. 소스 코드
def solution(nums):
    answer = 0
    nums.sort()
    temp = []

    for i in range(len(nums)):
        for j in range(i+1, len(nums), 1):
            for k in range(j+1, len(nums), 1):
                temp.append(nums[i]+nums[j]+nums[k])
    #중복제거를 하게되면 정답이 틀리게된다... 문제에 언급이없어 -_-
    #temp_set = set(temp)
    #temp_list = list(temp_set)
    temp_list = temp
    
    flag = True
    for i in temp_list:
        for j in range(2, i, 1):
            if (i%j == 0):
                flag = False
                break;
        if (flag):
            answer +=1
        flag = True

    return answer

 

4. 결과

728x90