사용 언어 - Python3
문제 - 소수 만들기
정답
itertool.combination 소수 구하기 (정답 맞춘 여부 O)
1. 리스트 n개 중에 3개 선택하기
import itertools
itertools.combination(n,3) = nC3
2. 3개씩 묶은 조합을 더해서 새로운 리스트에 저장해준다. 이때, 합이 같은 경우가 있을 수 있으니 중복을 제거한다.
3. 소수 구하기
1부터 숫자의 절반까지로 나눠주면서 나누어떨어지는 개수가 1개라면 소수
개수를 count 해준다.
# 정답
import itertools
def solution(nums):
answer = 0
# 3개를 선택하는 경우의 수 nC3
stack = list(itertools.combinations(nums,3))
sum_stack = []
for s in stack:
sum_stack.append(sum(s))
set(sum_stack) #중복제거
# 소수구하기
for i in sum_stack:
cnt = 0
for j in range(1,i//2+1):
if i%j == 0:
cnt += 1
if cnt == 1: #소수
answer += 1
return answer
첫번째 시도에서 테스트 케이스 에러가 났었다.
flow는 정답과 동일했지만,
조합의 합을 새 리스트에 저장할 때, 소수이면서 합이 리스트에 없는(=중복제거) 원소만 append 하려고 했다.
한 번에 작업하려고 하다보니 오류가 난 것 같다.
# 테스트 케이스 에러
import itertools
def solution(nums):
# 3개를 선택하는 경우의 수 nC3
stack = list(itertools.combinations(nums,3))
sum_stack = []
for s in stack:
cnt = 0
for i in range(1,sum(s)//2):
if sum(s)%i == 0:
cnt += 1
if cnt == 1 and sum(s) not in sum_stack: #소수이면서 중복된 값 아닌 경우
sum_stack.append(sum(s))
return len(sum_stack)
다른 사람의 좋은 풀이
애초에 list에 조합들을 저장할 때 sum을 해준다.
n_list = list(sum(i) for i in itertools.combinations(nums, 3))
레퍼런스
- 정답 깃허브
'Algorithm > 구현' 카테고리의 다른 글
[프로그래머스 lv 1] x만큼 간격이 있는 n개의 숫자 (0) | 2023.05.31 |
---|---|
[프로그래머스 lv 1] 직사각형 별찍기 (0) | 2023.05.31 |
[프로그래머스 lv 1] 예산 (0) | 2023.05.30 |
[프로그래머스 lv 1] [1차] 비밀 지도 (0) | 2023.05.30 |
[프로그래머스 lv 1] [1차] 다트 게임 (1) | 2023.05.30 |
댓글