코딩테스트 문제풀이

양진혁·2022년 3월 15일
0

문제풀이

프로그래머스: 소수 만들기

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

입출력 예

numresult
[1,2,3,4]1
[1,2,7,6,4]4

입출력 예 설명

입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.

입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.

from itertools import combinations
#소수 판별하는 함수
def count_num(num):
  #소수는 1과 자기자신으로만 나눠지는 숫자이므로 0,1인 경우 false
  if num==0 or num==1:
        return False
  else:
      for n in range(2, (num//2)+1): # math를 사용하지 않고 num//2+1 사용
          if num%n == 0:
              return False
      return True
#소수 개수 찾는 함수
def solution(array):
  count =0
  #itertools의 조합을 사용하여 3개의 수가 들어가는 조합식을 만든 후 tuple형태를 list 형태로 변환
  comb = list(combinations(array,3))
  for i in comb:
  # count_num의 값이 true면 count를 하나씩 늘려줌
    if count_num(sum(i)):
      count +=1
  return count

먼저 itertools를 이용하여 조합을 만든 후 tuple을 list로 변환시킨다. 그 다음 소수인지 아닌지 판별하는 함수를 작성한다. 소수의 경우 1과 자기자신으로만 나눠지기 때문에 다른 숫자로 나눠지면 false를 아니면 True를 리턴한다. 그 다음 만약 소수를 판별하는 함수가 true일 경우 그 숫자는 소수이기 때문에 count를 1씩 늘려준다.

0개의 댓글