Python/Programmers

Lv.1-소수 찾기

JAEJUNG 2021. 7. 7. 00:58

문제

주어진 배열에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때

소수가 되는 경우의 개수를 return해야 한다.

 

내 코드

from itertools import combinations

def solution(nums):
    all_nums = []
    cnt = 0
    li = list(combinations(nums,3))
    for i in range(len(li)):
        all_nums.append(sum(li[i]))

    for i in range(len(all_nums)):
        half = int(all_nums[i]/2)
        for y in range(half+1):
            if y!=0 and y!=1 and all_nums[i]%y==0:
                cnt+=1
                break
    return len(all_nums)-cnt

 

문제 풀이

  1. combinations를 통해 3개 숫자 합의 경우의 수를 li 리스트에 저장한다.
  2. 만약 18이라는 숫자가 있다면 18/2=9까지 for문을 돌려 나머지가 0이 되면 for문을 탈출한 후 count값을 1 증가시킨다.(소수가 아닌 수)
  3. 전체 배열의 개수 - count값을 return한다.(소수의 개수)

 

고수 풀이

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

'Python > Programmers' 카테고리의 다른 글

Lv.1-로또의 최고 순위와 최저 순위  (0) 2021.07.07
Lv.1-음양 더하기  (0) 2021.07.07
Lv.1-K번째 숫자 꺼내기  (0) 2021.07.07
Lv.1-신규 아이디 추천  (0) 2021.07.07
Lv.1-마라톤  (0) 2021.07.07