첫번째 코드
소수임을 확인하는 코드를 작성한 후
nums안의 원소 중 세개를 더한 값들의 리스트와 비교하여 소수가 맞는지 확인한다.
import math
def solution(nums):
answer = 0
A = []
prime = list(range(1001))
prime[1] = 0
for i in range(2, int(math.sqrt(1001))+1):
for j in range(i*i, 1001, i):
prime[j] = 0
for i in range(len(nums)):
for j in range(i+1, len(nums)):
for k in range(j+1, len(nums)):
A.append(nums[i] + nums[j] + nums[k])
for i in A:
if prime[i] != 0:
answer += 1
return answer
오류!
두번째 코드
nums의 각 원소는 1 이상 1,000 이하의 자연수라는 말에 너무 꽂혀버렸다.
3개를 더한 것까지의 범위를 생각해야 한다!
import math
nums = [1,2,7,6,4]
answer = 0
A = []
for i in range(len(nums)):
for j in range(i+1, len(nums)):
for k in range(j+1, len(nums)):
A.append(nums[i] + nums[j] + nums[k])
A.sort()
limit = sum(A[-3:])
prime = list(range(limit))
prime[1] = 0
for i in range(2, int(math.sqrt(limit))+1):
for j in range(i*i, limit, i):
prime[j] = 0
for i in A:
if prime[i] != 0:
answer += 1
print(answer)
오류
세번째 코드
범위를 잡을 때 생각이 짧았다.
리스트의 인덱스가 0부터 시작하므로 인덱스와 맞추기 위해 +1을 해야한다.
import math
def solution(nums):
answer = 0
A = []
for i in range(len(nums)):
for j in range(i+1, len(nums)):
for k in range(j+1, len(nums)):
A.append(nums[i] + nums[j] + nums[k])
A.sort()
limit = sum(A[-3:]) + 1
prime = list(range(limit))
prime[1] = 0
for i in range(2, int(math.sqrt(limit))+1):
for j in range(i*i, limit, i):
prime[j] = 0
for i in A:
if prime[i] != 0:
answer += 1
return answer
통과!
링크
programmers/프로그래머스/1/12977. 소수 만들기 at main · ornni/programmers
repository for recording Programmers Algorithm problem solving - ornni/programmers
github.com
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
추억 점수 (0) | 2024.05.13 |
---|---|
약수의 개수와 덧셈 (0) | 2024.05.08 |
최소직사각형 (2) | 2024.05.03 |
3진법 뒤집기 (0) | 2024.04.30 |
최대공약수와 최소공배수 (0) | 2024.04.30 |