소소한 컴퓨터 이야기

소수 만들기

by Cori

문제

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

 

제한사항

· nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.

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

 

입출력 예

nums result
[1, 2, 3, 4] 1
[1, 2, 7, 6, 4] 4

풀이

1. Me

def isPrime(number):
    if number in (0, 1):
        return False 
    
    for i in range(2, number):
        if number % i == 0:
            return False
    return True    

def solution(nums):
    answer = 0 
    val_list = set(nums)
    for i in range(len(val_list)):
        for j in range(i+1, len(val_list)):
            for k in range(j+1, len(val_list)):
                if isPrime(nums[i]+nums[j]+nums[k]):
                    answer += 1 
    return answer

3중 for문을 이용하여 문제를 풀었다. 처음에는 if 문 안에 break를 추가하여 시간을 단축시키고자 하였는데, break문을 추가했을 경우에는 testcase 정확성 문제를 거의 통과하지 못한다. break문을 제거하고 나니 정상적으로 통과 !

 

2. Others

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 함수를 이용하여 문제를 풀었다. 처음 들어보는 라이브러리들이 아직 많다.. 


내용 정리

1. combinations

0) 정의

-> combinations은 조합을 의미하며, 서로 다른 n개 중에 r개를 취해 조를 만드는 경우의 수를 구한다. (조합 - 순서 고려하지 x)

 

1) 예시

-> [A,B,C]의 리스트에서 2개의 원소를 나열하면, [(A, B), (A, C), (B,C)]가 나옴.. (A, B) = (B,A)로 취급 ! 

 

2) 사용 예시

import itertools

arr = ['A', 'B', 'C']
nCr = itertools.combinations(arr, 2)
print(list(nCr))   # [('A', 'B'), ('A', 'C'), ('B', 'C')]

 

2. permutations

0) 정의

-> permutations은 순열을 의미하며, 서로 다른 n개 중에 r개를 취해 조를 만드는 경우의 수를 구한다. (순열 - 순서 고려 o)

 

1) 예시

-> [A,B,C]의 리스트에서 2개의 원소를 뽑는 순열을 구하면, [(A, B), (A, C), (B, A), (B, C), (C, A), (C, B)]가 나옴 ..

 

2) 사용 예시

import itertools

arr = ['A', 'B', 'C']
nPr = itertools.permutations(arr, 2)

list(nPr)   # [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

 

3) 참고

순열과 조합

'CS > Coding Test' 카테고리의 다른 글

제일 작은 수 제거하기  (0) 2021.09.08
스킬트리  (0) 2021.09.06
올바른 괄호  (0) 2021.09.04
다음 큰 숫자  (0) 2021.09.03
숫자의 표현  (0) 2021.09.03

블로그의 정보

코딩하는 오리

Cori

활동하기