프로그래머스 완전탐색 - 소수 찾기

이환희·2021년 9월 1일
0

Algorithm

목록 보기
35/47

https://programmers.co.kr/learn/courses/30/lessons/42839

문제 설명

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

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

제한사항

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

풀이

from itertools import permutations


def isPrime(n):
    check = True
    if n != 2 and n % 2 == 0:
        return False
    if n == 1 or n == 0:
        return False
    for i in range(2, n):
        if n % i == 0:
            check = False
    return check


def solution(numbers):
    answer = 0
    n_list = list(numbers)
    com_list = []
    for i in range(1, len(numbers)+1):
        com_list.extend(list(map(''.join, permutations(n_list, i))))
    set_com = set(map(int, com_list))
    for n in set_com:
        if isPrime(int(n)):
            answer += 1
    return answer

numbers의 모든 수들의 순열을 개수별로 구해서 com_list에 저장하고
각각을 int로 캐스팅하고 중복을 없애는 set을 통해
set_com에 저장한뒤 하나하나 isPrime 메서드를 통해 확인한다.

isPrime 은 2~ (n-1)의 숫자를 n에서 나눈 나머지가 0이되는지 체크해주는데
편의를 위해 0,1, 그리고 짝수 일때는 바로 False로 넘어간다.
이때 실수한게 2는 짝수이면서 소수인데 깜빡해서 틀렸었다.
2는 꼭 소수로 체크해주자!

0개의 댓글

관련 채용 정보