728x90
https://programmers.co.kr/learn/courses/30/lessons/12977
코딩테스트 연습 - 소수 만들기
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때
programmers.co.kr
- 코드1
from itertools import combinations
# 소수 확인
def prime(sum):
for i in range(2,sum):
# 하나라도 나누어 떨어지면 소수 아님
if not sum%i:
return False
# 2~(자기자신-1) 중 하나라도 나누어 떨어지지 않으면 소수
return True
def solution(nums):
answer = 0
# 3개씩 조합으로 뽑아보자
for three in list(combinations(nums,3)):
# 합 구하기
three_sum = sum(three)
# 그 합이 소수인가?
if prime(three_sum):
# 맞으면 +1
answer += 1
return answer
- 생각
- 코드1이 시간초과가 날 수도 있어서 다른 방법
- 2 ~ (N-1)까지 확인하기에 숫자가 클 경우 시간 초과 우려
- 수의 약수는 쌍으로 이루어져 있으므로 절반만 확인해보자
- 예) 12의 약수는 1,2,3 / 4,6,12
- 앞의 2,3이 나누어 떨어진다는 것을 확인하면 4,6은 확인할 필요가 없음
- 약수의 중간 숫자를 확인하는 법은 루트!!
- 루트12는 3.XX, int(루트12)는 3
- 코드1이 시간초과가 날 수도 있어서 다른 방법
- 코드2
from itertools import combinations
def solution(nums):
cnt = 0
# 3개씩 조합으로 뽑기
for num in list(combinations(nums, 3)):
# 합
N = sum(num)
# 소수인지 확인
# 2~int(루트(N))까지 확인
for i in range(2, int(N**0.5)+1):
# 나누어 떨어지면 소수X
if N % i == 0:
break
# 하나라도 나누어 떨어지지 않으면 소수
else:
cnt += 1
return cnt728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
| [백준] 1759. 암호 만들기 - Python (0) | 2022.06.09 |
|---|---|
| [프로그래머스] Lv.1 예산 - Python (0) | 2022.06.09 |
| [백준] 1018. 체스판 다시 칠하기 - Python (0) | 2022.06.07 |
| [백준] 1182. 부분수열의 합 - Python (0) | 2022.06.06 |
| [백준] 1987. 알파벳 - Python (0) | 2022.06.06 |
댓글