Algorithm/구현
[프로그래머스 lv 1] 소수 만들기
HANNI하니
2023. 5. 31. 11:26
사용 언어 - Python3
문제 - 소수 만들기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답
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))
레퍼런스
- 정답 깃허브
GitHub - yyeongeun/codingtest: 코딩테스트 공부
코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.
github.com