본 글은 프로그래머스 문제를 기반으로 작성한 글입니다. (https://school.programmers.co.kr/learn/courses/30/lessons/12977)
문제 설명
주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
- nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.
내 생각
흐름
1) 배열 인덱스 3개 뽑기 : 숫자 3개를 어떤 순서로 더하든 상관없으므로 인덱스 순서 상관없음
- itertools에 있는 combinations 쓰면 인덱스 3개 뽑는데 한 줄 걸리는 거 알지만 사용하지 않는 방안에 대해 생각
- 결국 안돼서 3중 for문 씀
2) 숫자 더하기
3) 그 숫자가 소수인지 판단하기
- 소수 판단은 해당 숫자의 제곱근 (** 0.5)까지 해주면 됨
작성한 코드
def solution(nums):
answer = 0
INDEX = []
for i in range(len(nums)-2):
for j in range(i+1, len(nums)-1):
for k in range(j+1, len(nums)):
INDEX.append([i, j, k])
for i, j, k in INDEX:
n = nums[i] + nums[j] + nums[k]
if n % 2 == 0:
continue
isPrime = True
for w in range(2, int(n**0.5)+1):
if n % w == 0:
isPrime = False
break
if isPrime:
answer += 1
return answer
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Level1/Python3] 로또의 최고 순위와 최저 순위 (0) | 2022.07.30 |
---|---|
[Level1/Python3] 신규 아이디 추천 (0) | 2022.07.30 |
[Level1/Python3] 키패드 누르기 (0) | 2022.07.30 |
[Level1/Python3] 음양 더하기 (0) | 2022.07.30 |
[Level1/Python3] 3진법 뒤집기 (0) | 2022.07.29 |