일일구름 IT

프로그래머스 lv.1 [소수 만들기] Summer/Winter Coding(~2018) 본문

프로그래머스/프로그래머스 lv.1

프로그래머스 lv.1 [소수 만들기] Summer/Winter Coding(~2018)

일구름 2022. 7. 6. 23:31

문제 설명

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

 

내 문제 풀이 :

def solution(nums):
    answer = 0
    for i in range(0, len(nums)-2):
        for j in range(i+1, len(nums)-1):
            for k in range(j+1, len(nums)):
                n = nums[i] + nums[j] + nums[k]
                for o in range(2, n+1):
                    if n % o == 0:
                        if n == o:
                            answer += 1
                        break
    return answer
  • 해야할것
    1. n개 중 3개 고르기
    2. 소수인지 판별
  • for문 3개를 이용하여 nums에서 숫자 3개를 고르는 모든 경우의 수를 계산함
  • 수를 2부터 나누었을 때 처음으로 나눠진 수가 자신과 같으면 소수로 판별

다른 사람 풀이 :

def solution(nums):
    from itertools import combinations as cb
    answer = 0
    for a in cb(nums, 3):
        cand = sum(a)
        for j in range(2, cand):
            if cand%j==0:
                break
        else:
            answer += 1
    return answer
  • itertools를 이용해 nums요소의 모든 조합을 구할 수 있음
  • itertools.combinations(nums, 3) → nums리스트에서 요소를 3개씩 묶은 모든 조합
from itertools import combinations
def prime_number(x):
    answer = 0
    for i in range(1,int(x**0.5)+1):
        if x%i==0:
            answer+=1
    return 1 if answer==1 else 0

def solution(nums):
    return sum([prime_number(sum(c)) for c in combinations(nums,3)])
  • 자연수 n에 대해서 1보다 크고 루트 n 이하인 모든 자연 수들로 나누어 떨어지지 않으면 소수라는 소수 판정법 이용

 

https://www.notion.so/5478d444786644aaac1ac9f981d73bbd

 

소수 만들기

문제 설명

www.notion.so