본문 바로가기
Algorithm/구현

[프로그래머스 lv 1] 소수 만들기

by HANNI하니 2023. 5. 31.

사용 언어 - 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

 

댓글