코딩테스트) 소수 만들기

Gary's Note·2022년 8월 27일
0

1. ToDo

- 프로그래머스 코딩테스트 풀이


2. 풀이 조건 요약

[기본 조건]

  • nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
  • nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

3. 풀이

from itertools import combinations

# 기대값 [1,2,3,4] -> 1
# 기대값 [1,2,7,6,4] -> 4
def solution(nums: list):
    # 소수의 정의 : 양의 약수가 1과 자신뿐인 2개로 구성된 자연수
    # 즉, 나누었을 때 1과 자기 자신으로만 나눌 수 있는 자연수
    answer = 0

    # combinations를 사용해서 중복되지 않는 조합을 구함
    # combinations([배열 또는 리스트], [조합의 갯수])
    temp = list(combinations(nums, 3))

    # 각 조합별 탐색
    for (a, b, c) in temp:
        # 합계
        total = a + b + c

        # 나머지 연산이 성공한 갯수를 저장할 변수
        temp = 0

        for i in range(2, total): 
            # 나머지 연산 성공
            if total % i == 0: 
                temp += 1
                break

        # 합계의 미만의 수 중 나머지 연산이 성공하지 않으면 소수
        if temp == 0:
            answer += 1

    return answer

test_arr = [[1,2,3,4], [1,2,7,6,4], [1, 4, 5, 6, 2, 3], [1, 9, 3, 2, 8, 7, 6, 5, 4]]

for ar in test_arr:
    print(solution(ar))

4. 다른 사람의 풀이

from itertools import combinations 
def check(a, b, c): 
    total = a + b + c

    for i in range(2, total): 
        if total % i == 0 : return False 
    return True 

def solution(nums):
    answer = 0
    A = list(combinations(nums, 3))
    for i in A: 
        if check(i[0], i[1], i[2]): answer += 1
        
    return answer

test_arr = [[1,2,3,4], [1,2,7,6,4], [1, 4, 5, 6, 2, 3], [1, 9, 3, 2, 8, 7, 6, 5, 4]]

for ar in test_arr:
    print(solution(ar))
profile
_reap what you sow_

0개의 댓글