소수 만들기
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