[코테] 소수 만들기

HOU·2022년 6월 7일
0

코딩테스트

목록 보기
9/24
post-thumbnail

문제

소수 만들기

문제 설명

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

예시

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

해결책

총 필요한게 크게 두가지라고 생각했다.
1. 소수를 구하는 알고리즘
2. 배열을 3가지 수로 겹치지 않게 더 해줄 방법!

소수 구하기

소수 구하는 알고리즘은 구글링을 통해 가지고 왓다.

def is_prime_number(x):
   for i in range(2, x):
       if x % i == 0:
           return False 
   return True 

소수는 자기 자신과 1로만 나뉘어 지는 수이다. .그렇기 때문에! 1과 자기 자신을 제외한 수로 나누고, 나뉘어지는 경우가 있으면 소수가 아니므로 False를 출력한다!

배열을 3가지 수로 겹치지 않게 더하기

이게 가장 애를 많이 먹었던 부분인거 같다... 후후후 생각보다 잘 안되어서 print로 계속 찍어가면서 이유를 찾아보았다.

def solution(nums):
   answer = 0
   decimal = []
   for i in range(0, len(nums)-2):
       for j in range(i+1, len(nums)-1):
           for z in range(j+1, len(nums)):
               decimal.append(nums[i]+nums[j]+nums[z])
               
               

세수를 구해야 하기 때문에, 삼중 for문을 사용했고 [1, 2, 3, 4] 의 경우 index로 보면 [0, 1, 2, 3] 이기 때문에 0 , 1, 2가 되고, 1, 2, 3으로 반복문이 돌아 갈 수 있게 만들었다. 처음엔 range를 사용하지 않고, nums를 사용해서 상당히 풀리지 않았다.

풀이

나의 풀이

def solution(nums):
   answer = 0
   decimal = []
   for i in range(0, len(nums)-2):
       for j in range(i+1, len(nums)-1):
           for z in range(j+1, len(nums)):
               decimal.append(nums[i]+nums[j]+nums[z])
               
   for d in decimal:
       if(is_prime_number(d)):
           answer += 1
           
   return answer;

def is_prime_number(x):
   for i in range(2, x):
       if x % i == 0:
           return False 
   return True 

남의 풀이

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의 combinations 함수가 눈에 보이는데 찾아보니 배열에 사용하면 combinations(배열, n)사용시 배열안에서 n개의 중복되지 않은 n개의 숫자를 추출해서 만들어 준다.

소감

파이썬 라이브러리에 감탄스럽다. 저런 라이브러리도 있다니, 더 공부해야겠다.

profile
하루 한 걸음 성장하는 개발자

0개의 댓글