차밍이

[Python] 프로그래머스 - 완전탐색 - 소수찾기 본문

파이썬/알고리즘

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

2022. 6. 16. 18:03
반응형
 

목차

    문제 설명

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

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

    제한사항
    • numbers는 길이 1 이상 7 이하인 문자열입니다.
    • numbers는 0~9까지 숫자만으로 이루어져 있습니다.
    • "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
    입출력 예
    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 solution(numbers):
        numbers = list(numbers)
        numbers_set = set()
        answer = 0
        for i in range(len(numbers)):
            for value in list(permutations(numbers, i+1)):
                made_value = int("".join(value))
                if made_value not in numbers_set:
                    numbers_set.add(made_value)
                    if is_prime(made_value):
                        answer += 1
        return answer
    
    
    def is_prime(number):
        if number in (0, 1):
            return False
    
        for i in range(2,number//2 + 1):
            if number % i == 0:
                return False
        return True
    
    테스트 1 〉    통과 (0.11ms, 10.4MB)
    테스트 2 〉    통과 (70.50ms, 10.5MB)
    테스트 3 〉    통과 (0.03ms, 10.3MB)
    테스트 4 〉    통과 (3.26ms, 10.5MB)
    테스트 5 〉    통과 (4.99ms, 11MB)
    테스트 6 〉    통과 (0.03ms, 10.3MB)
    테스트 7 〉    통과 (0.08ms, 10.3MB)
    테스트 8 〉    통과 (4.98ms, 11MB)
    테스트 9 〉    통과 (0.04ms, 10.3MB)
    테스트 10 〉통과 (976.44ms, 10.6MB)
    테스트 11 〉통과 (33.12ms, 10.5MB)
    테스트 12 〉통과 (0.36ms, 10.4MB)

    문제 풀이 방법

    1. 소수인지 확인하는 부분은 is_prime함수를 사용해서 확인하는 함수를 따로 작성하였다.
    2. 전체 case를 찾아야 하므로 permutation을 사용해서 순열을 뽑았다.
    3. 011의 경우 순열에서 2 번 발생된다.
    4. 같은 숫자를 반복문 돌면서 is_prime을 확인하는 것은 시간 낭비이므로, 이전에 확인한 숫자인지 check를 해야한다. 그래서 numbers_set을 사용해서 확인한 경우는 add해 주었다.

    다른 사람들 처럼 멋지게 문제를 풀지는 않았다..ㅎ

    반응형

    관련된 글 보기

    Comments