[파이썬] D1. 소수 만들기

장서영·2026년 7월 29일

알고리즘

목록 보기
8/11

소수 만들기

made by ME

#입력: nums(정수 배열)
#출력: answer(3개 수의 합이 소수가 되는 경우의 수)

def solution(nums):
    answer = 0
    length = len(nums)
    for i in range(length-2): #0 ~ nums-3
        for j in range(i+1, length-1): #i+1 ~ nums-2
            for k in range(j+1, length): #j+1 ~ nums-1
                number = nums[i]+nums[j]+nums[k]
                if not(number%2): # 짝수라면 건너뛰기!
                    continue # break 대신 순번 건너뛰기만
                
                # 홀수라면 소수 검사만!
                for l in range(2,int(number**0.5)+1):
                        temp = True
                        if not(number%l):
                            temp = False
                            break
                if temp:
                    answer +=1 
                
    return answer

Gemini 피드백
1) temp 같은 flag 변수 대신 for-else 구문 활용하기

if-else vs. for-else 차이 (else가 실행되는 기준)
if-else: if 조건식이 거짓(false)일 때 실행
for-else: for 반목문이 중간에 break를 만나지 않고 끝까지 완료되었을 때 실행 ▶ 따라서 for-else 구문에서 반복문이 조기 종료(break)되지 않았다면 else가 실행된다.

for-else는 왜 있는 걸까?
: 반복문이 중간에 멈추지 않고 끝까지 다 돌았는지 체크하기 위해 굳이 변수를 하나 더 만드는 게 번거롭다라고 생각했기 때문이라고 한다. (역시 효율을 추구하는 개발의 세계..)

Gemini가 말하는 최고의 코드

from itertools import combinations

def is_prime(n):
    # 2보다 작은 수는 소수가 아님
    if n < 2:
        return False
    # 2부터 제곱근(√n)까지만 나누어 떨어지는지 검사
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True

def solution(nums):
    answer = 0
    
    #1. nums에서 3개를 뽑는 모든 조합 구하기
    for comb in combintions(nums, 3):
        #2. 3개 수의 합이 소수인지 검사
        if is_prime(sum(comb)):
            answer += 1
    
    return answer
        
  1. 소수 판별 로직을 is_prime 함수로 별도 분리 해서 메인 로직(solution) 함수가 훨씬 직관적으로 읽힌다.
  2. 3중 for문 대신 itertools.combinations 내장 모듈을 활용함으로써 실수를 줄일 수 있고, C언어 수준으로 최적화 되어 있어 실행 속도도 훨씬 빠르다고 한다.
  3. 제곱근까지만 검사함으로써 연산량을 줄여 효율성을 높힌다.
profile
하루살이 개발자

0개의 댓글