honey_pot

[python] 소수 만들기 본문

문제 풀이

[python] 소수 만들기

_tera_ 2021. 9. 9. 22:59

https://programmers.co.kr/learn/courses/30/lessons/12977

 

코딩테스트 연습 - 소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때

programmers.co.kr

 

https://honeypot.tistory.com/102

 

[python] 소수 찾기

에라스토테네스의 체 이용한다는 건 알지만 알기만 하고 구현하다 막히는 그 문제 두번째 푸는데 [True] * n 이후에 최대약수 int(n**0.5) 쓰다가 i이후 i의 배수들 False 판정 부분에서 막힌다. def soluti

honeypot.tistory.com

 

소수 찾기의 아리스토텔레스의 체를 이용해서 구했다.

 

from itertools import combinations

def aristo(n):
    sieve = [True]*(n+1)
    m = int(n **0.5)
    for i in range(2,m+1):
        if sieve[i] == True:
            for j in range(i+i,n+1,i):
                sieve[j]=False
    return sieve

def solution(nums):
    answer = 0
    ari = aristo(3000)
    combi = list(combinations(nums,3))
    
    for case in combi:
        if ari[sum(case)]:
            answer += 1
    return answer

combinations 라이브러리를 이용해서 nums의 숫자를 3개씩 묶어서 리스트화하고

for 문을 이용해서 그 세 수의 합이 소수(ari 리스트에 포함되어있으면 소수)인지 확인한다.

 

from itertools import combinations

def aristo(n):
    m = int(n **0.5)
    if m < 2:
        return False
    for i in range(2,m+1):
        if n % i ==0:
            return False
    return True

def solution(nums):
    answer = 0
    combi = list(combinations(nums,3))
    
    for case in combi:
        if aristo(sum(case)):
            answer += 1
    return answer

기본적으로 같지만 nums의 수가 1000 이하의 자연수라는 조건을 맞추기 위해 3000까지의 aristo 값을 저장한 리스트를 출력하는 경우가 아닌 case의 합계가 True와 False인지 바로 출력하는 방법

'문제 풀이' 카테고리의 다른 글

[python] 가장 큰 수  (0) 2021.09.10
[python] 124 나라의 숫자  (0) 2021.09.10
[python] 체육복  (0) 2021.09.09
[python] 크레인 인형뽑기 게임  (0) 2021.09.09
[python] 로또의 최고 순위와 최저 순위  (0) 2021.09.09
Comments