300x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 알고리즘
- CSS
- linux
- 구글 킥스타트
- OS
- AI
- nlp
- 순열
- PYTHON
- 동적 프로그래밍
- 운영체제
- 코딩
- 딥러닝
- 프로그래밍
- dp
- 리눅스
- 코딩테스트
- DFS
- 프로그래머스
- 백준
- 네트워크
- google coding competition
- 동적프로그래밍
- 그래프
- 코딩 테스트
- 브루트포스
- BFS
- kick start
- 킥스타트
- 파이썬
Archives
- Today
- Total
오뚝이개발자
소수 만들기 본문
728x90
300x250
문제설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
입출력 예
입출력 예에 대한 설명
입출력 예 #1
[1,2,4]를 이용해서 7을 만들 수 있습니다.
입출력 예 #2
[1,2,4]를 이용해서 7을 만들 수 있습니다.
[1,4,6]을 이용해서 11을 만들 수 있습니다.
[2,4,7]을 이용해서 13을 만들 수 있습니다.
[4,6,7]을 이용해서 17을 만들 수 있습니다.
풀이
큰 틀에서 보고 문제의 해결 방법을 순서대로 정리해보면 크게 2가지로 나눌 수 있다. 1) 세 원소 뽑기(조합) 2) 합이 소수인지 판별 과 같이 말이다. 먼저 중복없이 세 원소를 뽑기 위해선 3중for문을 사용하였다.(itertools의 combinations를 import하면 더 간단히 구현 가능하지만 여기선 최대한 모듈의 도움없이 구현해보기 위해 이와 같이 하였다.) 다음으로 합이 소수인지 판별하기 위해선 함수 안에 isprime이라는 함수를 만들었다. 직관적인 부분이라 코드를 보면 이해가 될 것이다.
def solution(nums):
answer = 0
def isprime(a):
for div in range(2, a//2+1):
if a%div==0:
return True
return False
for i in range(0,len(nums)-2):
for j in range(i+1,len(nums)-1):
for k in range(j+1,len(nums)):
sum=nums[i]+nums[j]+nums[k]
if not isprime(sum):
print(nums[i], nums[j], nums[k])
answer+=1
return answer
728x90
300x250
Comments