[파이썬] 프로그래머스 LV1 소수 만들기

청수동햄주먹·2023년 2월 8일
0

파이썬코딩테스트

목록 보기
14/35

프로그래머스 소수 만들기

전에 했던 삼총사와 소수찾기가 섞인 문제이다

첫 시도

from itertools import combinations
def primeList(n):
    num = set(range(1,n+1,2))
    for i in range(3,n+1,2):
        if i in num:
            num -= set(range(i*2,n+1,i))
    return num

def solution(nums):
    ans = []
    for x in combinations(nums,3):
        ans.append(sum(x))
    primes = primeList(max(ans))
    cnt = 0
    for x in ans:
        if x in primes:
            cnt+=1
    return cnt

primeList()

소수 찾기에서 다른 사람의 풀이에서 배운 대로 primeList함수를 만들었다.

  • 다른점은 num에 1부터 포함시켰다. set 자체를 리턴하기 때문에 1이 처음부터 포함 되어야 하기 때문이다.
  • range(3,n+1,2)에서 1이 아닌 3으로 넣은 이유는 1을 넣는다면 그 다음줄에서 1의 배수는 다 지워버려서 1밖에 남지 않게 된다.
  • 입력값 n은 메인 함수인 solution에서 combinations로 만들어진 각 그룹의 합 중 최대값을 입력 받게 된다.

solution()

  • from itertools import combinations로 3개의 요소가 포함되게 조합그룹들을 만들어준다
    • as something으로 다른 이름으로 명명해서 사용할 수 있다.
  • 그 그룹에서 합만을 ans리스트에 append 해준다
  • ans의 최대값을 primeList에 전달해 최대값까지의 소수 리스트를 확보
  • for룹으로 ans를 돌면서 소수리스트에 그값이 있을 때만 카운트를 올려준다

성능

첫 시도
테스트 1 〉통과 (0.62ms, 10.2MB)
테스트 2 〉통과 (0.88ms, 10.4MB)
테스트 3 〉통과 (0.34ms, 10.2MB)
테스트 4 〉통과 (0.26ms, 10.3MB)
테스트 5 〉통과 (0.93ms, 10.2MB)
테스트 6 〉통과 (1.73ms, 10.4MB)
테스트 7 〉통과 (0.36ms, 10.2MB)
테스트 8 〉통과 (5.96ms, 10.3MB)
테스트 9 〉통과 (0.45ms, 10.4MB)
테스트 10 〉통과 (3.21ms, 10.4MB)
테스트 11 〉통과 (0.04ms, 10.3MB)
테스트 12 〉통과 (0.03ms, 10.3MB)
테스트 13 〉통과 (0.05ms, 10.1MB)
테스트 14 〉통과 (0.03ms, 10.3MB)
테스트 15 〉통과 (0.03ms, 10.2MB)
테스트 16 〉통과 (3.75ms, 10.9MB)
테스트 17 〉통과 (8.80ms, 11.1MB)
테스트 18 〉통과 (0.56ms, 10.2MB)
테스트 19 〉통과 (0.55ms, 10.3MB)
테스트 20 〉통과 (4.76ms, 11.2MB)
테스트 21 〉통과 (4.66ms, 10.8MB)
테스트 22 〉통과 (1.22ms, 10.4MB)
테스트 23 〉통과 (0.01ms, 10.4MB)
테스트 24 〉통과 (4.90ms, 10.9MB)
테스트 25 〉통과 (3.66ms, 10.8MB)
테스트 26 〉통과 (0.01ms, 10.2MB)
profile
코딩과 사별까지

0개의 댓글