본문 바로가기

Python/프로그래머스

[프로그래머스] [Python] 소수 찾기

문제 풀이

 

from itertools import permutations

def solution(numbers):
    answer = 0

    # 순열을 저장할 배열 생성
    arr = []

    # 슷자가 1개인 것부터 검사할 것이다. 때문에 시작이 1이고 끝도 그에 맞춰서 1을 더해준다.
    for i in range(1, len(numbers) + 1):
        # 순열을 구하는 함수 permutations. 이를 list로 받아서 per에 저장.
        per = list(permutations(numbers, i))

        # 해당 배열을 arr에 추가.
        arr += per

    # 현재 arr 내의 각 배열에는 문자형으로, 그리고 숫자 하나씩 떨어져서 원소들이 저장되어 있다.
    # 이를 ''.join을 사용하여 하나로 합쳐주고, '0123'같은 현상을 방지하기 위해 int형으로 변환한다.
    # 이후 중복된 원소를 제거하기 위해 set으로 변경.
    arr = set([int(''.join(x)) for x in arr])

    # 소수 판별
    for i in arr:

        # 소수라면 True를, 아니라면 False를 반환할 변수 생성
        flag = True

        # 2보다 작은 수는 소수라고 부르지 않는다. 때문에 False
        if i < 2:
            flag = False

        # 2부터 i까지 돌면서
        for j in range(2, i):

            # i가 j로 나누어 떨어진다는 것은 j라는 약수를 가지고 있다는 뜻이 된다. 이는 소수가 아니므로 False
            if i % j == 0:
                flag = False
                break

        # 위의 조건문을 모두 통과했다면 소수가 맞다. 때문에 answer += 1
        if flag:
            answer += 1

    return answer

 

 

 

문제 링크

 

programmers.co.kr/learn/courses/30/lessons/42839?language=python3

 

코딩테스트 연습 - 소수 찾기

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이

programmers.co.kr