📋 문제
✳️ 코드 작성
from itertools import combinations
import math
def is_prime(x):
# 2부터 x의 제곱근까지의 모든 수를 확인하며
for i in range(2, int(math.sqrt(x)) + 1):
# x가 해당 수로 나누어 떨어진다면
if x % i == 0:
return False
return True
def solution(nums):
answer = 0
for x in combinations(nums, 3):
if is_prime(sum(x)):
answer += 1
return answer
💟 라이브러리 호출
from itertools import combinations
import math
- itertools 라이브러리에서 combinations 함수를 불러옴
- 이 함수는 주어진 리스트에서 지정된 개수만큼의 요소를 뽑아 조합을 만들어냄
- 3개의 숫자를 선택하는데 사용할 것
- math 라이브러리를 불러옴
- 라이브러리의 sqrt() 함수를 사용해 숫자의 제곱근을 계산하기 위해 필요
💟 소수 판단 함수 정의
def is_prime(x):
- 숫자 x가 소수인지 확인하는 함수를 정의
- 소수는 1과 자기 자신 이외에 나누어떨어지지 않는 수를 의미
for i in range(2, int(math.sqrt(x)) + 1):
if x % i == 0:
return False
return True
- 2부터 x의 제곱근(sqrt(x))까지의 범위에서 숫자 i를 반복
- 소수를 확인할 때는 x의 제곱근까지만 확인하면 충분 → 어떤 수가 나누어떨어진다면 그 두 약수 중 하나는 반드시 제곱근 이하에 존재하기 때문
- 예를 들어, 36의 약수는 1, 2, 3, 6, 12, 18, 36인데, 6까지만 확인해도 됨
- int()로 소수점 이하를 버리고 정수로 변환
- x를 i로 나눴을 때 나머지가 0이면, 즉 x가 i로 나누어떨어진다면, 이는 x가 소수가 아니라는 의미
- x가 i로 나누어떨어졌으므로 소수가 아니므로 False 반환
- 반복문을 모두 통과했음에도 나누어떨어지는 값이 없으면, x는 소수이므로 True를 반환
💟 소수인 경우의 개수 확인 함수 정의
def solution(nums):
- 주어진 숫자 리스트 nums에서 3개의 숫자를 선택하여 그 합이 소수인 경우의 개수를 세는 함수를 정의
answer = 0
for x in combinations(nums, 3):
if is_prime(sum(x)):
answer += 1
return answer
- answer = 0 소수인 합이 나올 때마다 세어줄 변수를 초기화
- combinations(nums, 3)는 리스트 nums에서 3개씩 숫자를 뽑아 가능한 모든 조합을 생성
- 이 조합들을 하나씩 x에 할당하며 반복문을 실행
- 예를 들어, nums = [1, 2, 3, 4]라면 조합은 (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4) 등이 됨
- 각 조합 x의 합을 구하고, 그 합이 소수인지 확인하기 위해 앞서 정의한 is_prime() 함수를 호출
- sum(x)는 3개의 숫자를 더한 값
- 예를 들어 (1, 2, 3)이라면 sum(x)는 6이 됨
- 만약 is_prime() 함수가 True를 반환하면, 즉 그 합이 소수라면, answer 값을 1 증가시켜 소수인 조합을 카운트
- 모든 조합에 대해 확인한 후, 최종적으로 소수인 경우의 개수인 answer 값을 반환
'📒 Today I Learn > 🐍 Python' 카테고리의 다른 글
[Python] 덧칠하기 (0) | 2024.10.02 |
---|---|
[Python] 모의고사 (0) | 2024.10.02 |
[Python] 콜라 문제 (0) | 2024.09.27 |
[Python] 푸드 파이트 대회 (0) | 2024.09.26 |
[Python] 가장 가까운 같은 글자 (0) | 2024.09.25 |