Hi, There!
안녕하세요, 바오밥입니다.
목차
- 문제
- 풀이
문제
문제 내용
어떤 수를 서로 다른 소수 3개의 합으로 표현하는 방법의 수를 구하려 합니다.
예를 들어 33은 총 4가지 방법으로 표현할 수 있습니다.
1. 3+7+23
2. 3+11+19
3. 3+13+17
4. 5+11+17
자연수 n이 매개변수로 주어질 때, n을 서로 다른 소수 3개의 합으로 표현하는 방법의 수를 return 하도록 solution 함수를 작성하려 합니다.
빈칸을 채워 전체 코드를 완성해주세요.
※ 1,000 이하인 소수는 168개 있습니다.
매개변수 설명
n이 solution 함수의 매개변수로 주어집니다.
- n은 1,000 이하인 자연수입니다.
return 값 설명
n을 서로 다른 소수 3개의 합으로 표현하는 방법의 수를 return 해주세요.
- 만약, n을 서로 다른 소수 3개의 합으로 표현할 수 없다면 0을 return 해주세요.
예시
예시 설명
예시 #1 문제에 나온 예와 같습니다.
예시 #2 9는 서로 다른 세 소수의 합으로 나타낼 수 없습니다.
풀이
풀이 코드 및 해설 (에라토스테네스의 체)
import math
def get_primes(n):
a = [0] * (n+1) # a -> 0 : 소수, a -> 1 : 소수로 사용 불가
for i in range(2, int(math.sqrt(n))+1):
# 2부터 n의 제곱근까지 반복
if a[i] == 0: # 만약 i가 0이라면 (소수라면)
for x in range(i+i, n+1, i): # i의 배수는 무조건 소수가 될 수 없음.
a[x] = 1 # i의 모든 배수를 1로 변경
return [i for i in range(2, n+1) if a[i] == 0]
# 2부터 n까지 순회하면서, 요소가 0인 값들만 반환
def solution(n):
answer = 0
primes = get_primes(n) # n까지의 소수 집합 저장
prime_len = len(primes) # 소수 집합의 개수를 저장
for i in range(0, prime_len - 2) : # 0부터 길이의 -2까지
for j in range(i + 1, prime_len - 1) : # 1부터 리스트 길이의 -1까지
for k in range(j + 1, prime_len) : # 2부터 리스트 길이까지
# 3중 for문으로 세 개의 수를 비교
if primes[i] + primes[j] + primes[k] == n :
# 세 개의 수의 합이 n과 동일한 경우
answer += 1 # answer 값 누적
return answer
'Certificate > Cert - Cos Pro 1급' 카테고리의 다른 글
[Cos Pro 1급] 기출문제 3회차, 선풍기를 몇대 사야 하나요 (0) | 2021.07.15 |
---|---|
[Cos Pro 1급] 기출문제 3회차, 카프리카 수 (0) | 2021.07.15 |
[Cos Pro 1급] 기출문제 3회차, 전광판 문구 출력 (0) | 2021.07.15 |
[Cos Pro 1급] 기출문제 3회차, 중복 문자열 이어붙이기 (0) | 2021.07.15 |
[Cos Pro 1급] 기출문제 3회차, 비숍으로부터 도망쳐 (0) | 2021.07.15 |