[Codetest] 프로그래머스 Lv1 - 소수 만들기

그냥·2022년 7월 25일
0

codetest

목록 보기
3/9

문제

소수 만들기



조건 정리

1) nums는 중복이 없는 1 이상 1000이하의 자연수로 이루어진 배열이다.
2) nums 중 서로 다른 3개를 골라 더했을 때 소수가 되는 개수를 return 한다.


풀이

from itertools import combinations

def is_prime_number(num):
    if num == 1:
        return False
    else:
        for n in range(2, num//2+1):
            if num % n == 0:
                return False
        return True

def solution(nums):
    answer = 0
    cmb = list(combinations(nums, 3))
    for arr in cmb:
        if is_prime_number(sum(arr)):
            answer += 1

    return answer

combinations

  • combinations는 중복을 허락하지 않고 n개 중 m개를 뽑는 경우의 수를 튜플 형태로 return 해준다.
  • 위 문제에서 배열에서 3개를 뽑아 합을 구하는 작업이 있으므로 combinations를 사용하면 좋다.

풀이

def is_prime_number(num):
    if num == 1:
        return False
    else:
        for n in range(2, num//2+1):
            if num % n == 0:
                return False
        return True

> 3개의 원소의 합이 소수이다는 것을 판별할 수 있는 함수를 만든다.
> for n in range(2, num//2+1): 2 ~ (원소 나누기 2의 값)으로 원소를 나누었을 때 나머지가 0이면 False(소수가 아님)
> for문을 돌 동안 False가 되지 않는다면 Truereturn 한다.

def solution(nums):
    answer = 0
    cmb = list(combinations(nums, 3))
    for arr in cmb:
        if is_prime_number(sum(arr)):
            answer += 1

    return answer

> list(combinations(nums, 3)) : [(a,b,c), (d,e,f) ...] 형태로 나온다.
> cmb에서 요소를 꺼냈을 때 그 요소의 합이 소수이면 answer+=1 이 되는 형태이다.


리뷰

  • 코드 테스트 외에 combinations를 사용하는 일이 얼마나 있을지 의문이다.
  • 메서드를 사용하는 것은 좋지만 처음에는 메서드를 사용하지 않고 바닐라 코드로 짜는 것이 더 의미 있지 않을까 싶다.
  • 바닐라 코드로 3가지 요소를 뽑는 방법을 삼중 for문 외에는 생각이 나지 않아서 다른 분들 블로그를 보았지만 결국 바닐라 코드로 푼 사람은 없었다.

0개의 댓글