SEO

[프로그래머스/파이썬] 소수 찾기 본문

코딩테스트/문제 풀이

[프로그래머스/파이썬] 소수 찾기

Crain 2025. 1. 26. 19:18
반응형

문제 설명

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

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

제한사항

  • numbers는 길이 1 이상 7 이하인 문자열입니다.
  • numbers는 0~9까지 숫자만으로 이루어져 있습니다.
  • "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.

입출력 예

numbers return

"17" 3
"011" 2

입출력 예 설명

numbers return

"17" 3
"011" 2

예제 #1

[1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.

예제 #2

[0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.

  • 11과 011은 같은 숫자로 취급합니다.
from itertools import permutations

def combi(arr):
    result = []
    for i in range(len(arr)):
        result.append(int("".join(arr[i])))
    return result

def solution(numbers):
    answer = 0
    numbers = list(numbers)
    tmp = []
    for i in range(1,len(numbers)+1):
        tmp += list(permutations(numbers, i))
    tmp = set(combi(tmp))
    
    for i in tmp:
        count = 0
        for j in range(2, i):
            if i % j == 0:
                break
            else:
                count += 1
        print(count)
        if count == i - 2: 
            answer += 1
    
    return answer
  1. permutations를 통해 주어진 숫자 카드에 대한 순열을 만듭니다. permutations는 앞뒤 순서까지 바꿔 순열을 생성하는 모듈입니다.
  2. 2부터 N-1까지 순회하며 나눠지는 수가 있는지 검사합니다.
  3. 만약 count가 N-2(1과 자기 자신을 뺀)와 같다면 소수인 것으로 판단합니다.
반응형