728x90
안녕하세요 뚜디 입니다 :)
코딩테스트 연습 - 소수 만들기 | 프로그래머스 (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
'Programmers > Python' 카테고리의 다른 글
[Python] 프로그래머스 :: 음양 더하기 (0) | 2021.10.07 |
---|---|
[Python] 프로그래머스 :: 내적 (0) | 2021.10.07 |
[Python] 프로그래머스 :: K번째수 (0) | 2021.10.07 |
[Python] 프로그래머스 :: 폰켓몬 (0) | 2021.10.07 |
[Python] 프로그래머스 :: 약수의 개수와 덧셈 (0) | 2021.10.07 |