Algorithm : Programmers - 소수만들기

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

👉 문제

🐱‍👤모범답안

from itertools import combinations
import math

# 소수 판별
def isprime(n):
	# 소수 판별할 숫자의 제곱근을 구한다.
    sqrt = math.sqrt(n)

	# 제곱근이 2보다 작으면 소수가 아니다.
    if sqrt < 2:
        return False

	# 2부터 제곱근까지 나눴을때 나머지가 0이 나오면 소수가 아니다.
    for i in range(2, int(sqrt+1)):
        if n % i == 0:
            return False
    
    return  True

def solution(nums):
    answer = 0
    # 중복을 제거한 3개로 된 숫자의 배열을 만듬
    arr = list(combinations(nums, 3))
	
    print('arr = > ',arr)
    # 3개의 배열을 소수판별 시킴 -> 세개의 합이 True 면
    for n1, n2, n3 in arr:
        print('n1 = > ', n1)
        print('n2 = > ', n2)
        print('n3 = > ', n3)
        print('----------')
        if isprime(n1+n2+n3):
            # answer를 + 1
            answer += 1

    return answer


print(solution([1,2,4,5]))
arr = >  [(1, 2, 4), (1, 2, 5), (1, 4, 5), (2, 4, 5)]
n1 = >  1
n2 = >  2
n3 = >  4
----------
n1 = >  1
n2 = >  2
n3 = >  5
----------
n1 = >  1
n2 = >  4
n3 = >  5
----------
n1 = >  2
n2 = >  4
n3 = >  5
----------
2

🥽 문제풀이

  1. combinations 를 이용하여 중복을 제거한 3개 숫자의 배열을 만듬.

  2. isprime 함수를 만들어서 소수 판별을 한다.

    • 소수 판별할 숫자의 제곱근을 구한다.
    • 제곱근이 2보다 작으면 소수가 아니다.
    • 2부터 제곱근까지 나눴을때 나머지가 0이 나오면 소수가 아니다.
    • 나누어 떨어지지 않으면 소수이다.

좋은 웹페이지 즐겨찾기