Posts 소수찾기 [Python]
Post
Cancel

소수찾기 [Python]

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

문제 설명

  • 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
  • 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

제한 사항

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

문제 풀이

  • 숫자가 주어지면 소수인지 아닌지 판멸하는 prime 함수를 생성
  • numbers가 주어지면 itertools의 permutations를 사용하여 각 경우의 수를 모두 더함
  • set을 이용하여 중복을 제거하고
  • 011 과 11을 같게 만들기 위해 for문을 돌면서 join을 후 다시 set으로 중복제거를 함
  • 이후 ls에 있는 수를 prime 함수를 통해 소수 판별을 하고 소수면 answer가 1씩 더해짐
1
2
3
4
5
6
7
8
9
10
import math
import itertools

def prime(number):
    if number < 2:
        return False
    for i in range(2, int(math.sqrt(number)) + 1):
        if number % i == 0:
            return False
    return True
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def solution(numbers):
    answer = 0
    ls = []
    ls2 = []
    for i in range(1, len(numbers)+1):
        k = list(itertools.permutations(numbers,i))
        ls = ls + k
    ls = list(set(ls))

    for j in ls:
        ls2.append(int(''.join(j)))
        ls = list(set(ls2))

    for n in ls: 
        if prime(n):
            print(n)
            answer += 1
    return answer
1
2
numbers = '17'
solution(numbers)
1
2
3
4
5
6
7
8
9
7
17
71





3
1
2
numbers = '011'
solution(numbers)
1
2
3
4
5
6
7
8
101
11





2
This post is licensed under CC BY 4.0 by the author.