본문 바로가기
Programming/Python

[프로그래머스 Python] 소수 만들기

by 용스토리랜드 2024. 7. 18.

💡문제 설명

 

주어진 숫자 중 3개의 수를 더했을 때, 소수(prime number)가 되는 경우의 개수를 구하기. 

숫자들이 들어있는 배열 nums 가 매개변수로 주어질 때, nums 에 있는  숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성하기 

 

💡제한사항

1. nums 에 들어있는 숫자의 개수는 3개 이상 50개 이하

2. nums 의 각 원소는 1 이상 1,000 이하의 자연수, 중복된 숫자가 들어있지 않다. 

 

💡입출력 예시

 

💡풀이

1. 3중 for 문 : 서로 다른 3개의 값들을 더해주기 위함. 

ㄴ for 루프는 주어진 범위에서 요소가 없으면 자동으로 실행되지 않고 지나간다. 

ㄴ 만약, for i in range(4, 3) : print(i) 이 구문은 에러가 발생할 것 같지만, 발생하지 않고 다음으로 넘어간다.

ㄴ 따라서, nums 의 길이가 4일 때, 밑의 코드에서 k는 j가 3인 경우 for k in range(4, 4) : ... 는 실행되지 않고 다시 for i 문으로 올라가게 된다.

 

2. if len([i for i in range(1, sum_3 + 1) if sum_3 % i == 0]) == 2 : 
                    prime.append(sum_3)

ㄴ 소수의 특성 (1과 자기자신만을 약수로 가짐) 을 활용해 nums 에 주어진 값 중 3개를 더해서 소수인 경우 prime 리스트에 추가

 

3. return len(prime) : prime 리스트에 쌓인 (소수) 값들의 개수를 return 한다.

# for 루프는 주어진 범위에서 요소가 없으면 자동으로 실행되지 않고 지나간다.
# 따라서 for 구문 안에 있는 덧셈은 k 가 범위안에 있을 때만 실행
# pass 명령어를 명시적으로 사용하지 않아도, 루프 범위가 유효하지 않으면 아무작업도 하지 않고 다음 코드로 넘어간다.

# TIL (0718)
def solution(nums):
    prime = [] 

    for i in range(len(nums)) :
        for j in range(i+1, len(nums)) :
            for k in range(j+1, len(nums)) : 
                sum_3 = nums[i] + nums[j] + nums[k]
                if len([i for i in range(1, sum_3 + 1) if sum_3 % i == 0]) == 2 : 
                    prime.append(sum_3)
    return len(prime)
반응형