[PYTHON]

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

b___gly 2022. 4. 23. 18:40

https://programmers.co.kr/learn/courses/30/lessons/12977

 

코딩테스트 연습 - 소수 만들기

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

programmers.co.kr

 

내가 생각한 접근법

  • combinations 때려서
  • if문 돌려서 % i 가 0이면 answer에 담고
  • 그 수를 len으로 세기

 

풀이

def check_sum(num) :
	for i in range(2, num):
    	# num을 2~num 전까지 나누는데 나머지가 0이면 소수가 아니라는 뜻. 그래서 False 반환.
    	if num % i == 0 :
        	return False
    # 나눴는데 다 0이 아니다라는 건 소수라는 뜻(1과 자기자신밖에 딱 안 나눠떨어짐). 그래서 True 반환.
    return True

def solutions(nums) :
	answer = []
    # 3개씩 뽑을 수 있는 모든 경우의 수 다 구해서 a에 저장.
    a = list(combinations(nums,3))
    
    #a 돌면서 모든 조합의 sum을 구해봄. 거기서 함수check_sum 돌려서 True가 나오면 answer에 1씩 추가. 
    for i in a :
    	sum = i[0] + i[1] + i[2]
        if check_sum(sum) :
        	answer += 1
            
 return answer

 

combinations

 

  • 하나의 리스트에서 모든 조합을 계산을 해야 한다면, permutations(순열), combinations(조합)을 사용
  • 순열은 순서 상관 O, 조합은 순서 상관 X. ex) (A,B)와 (B,A)는 순열에서 다른 것. 조합에서 같은 것.
  • 두개 이상의 리스트에서 모든 조합을 계산해야 한다면, product를 사용