# [프로그래머스] 소수 찾기 문제 풀기 (파이썬)
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
# 단순화 및 solution 함수 작성
먼저 문제를 단순화해보면 다음과 같다.
1. numbers 문자열을 통해 만들수있는 숫자들을 p_numbers 라는 리스트에 저장한다.
ex) p_numbers = [1, 7, 17, 71] if numbers="17"
2. p_numbers 에 들어있는 소수들의 개수가 최종 답이 된다.
ex) 7, 17 71이 소수이므로 답은 3이다.
1
2
3
4
5
2
3
4
5
세부 구현을 함수로 추상화한후, solution 함수를 작성하면 아래와 같다.
def solution(numbers):
answer = 0
p_numbers = possible_numbers(numbers)
for num in p_numbers:
answer += is_prime_number(num) # 소수라면 1, 아니라면 0
return answer
def possible_numbers(number):
# possible_numbers("17") 은 리스트를 리턴하고, 이를 정렬하면 [1, 7, 17, 71]
pass
def is_prime_number(number):
# 소수이면 1, 아니면 0
pass
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 테스트 코드 작성
def test_solution():
assert solution("17") == 3
assert solution("011") == 2
def test_possible_numbers():
p1 = possible_numbers("17")
p1.sort()
p2 = possible_numbers("011")
p2.sort()
assert p1 == [1, 7, 17, 71]
assert p2 == [0, 1, 10, 11, 101, 110]
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# possible_numbers 함수 구현
# 옵션1: from itertools import permutations
# 옵션2: def permutations(iter, r=None): ~~
def possible_numbers(numbers):
result = []
for i in range(1, len(numbers) + 1):
for tup in permutations(numbers, r=i):
result.append(int("".join(tup)))
return list(set(result))
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
numbers 문자열를 통해 만들수 있는 모든 숫자를 구하기위해서는
numbers 를 통해 만들수있는 모든 순열(permutation)을 구해야한다. 그렇기때문에 permutations 함수를 구현하거나, 라이브러리를 사용하여야한다.
permutations(numbers, 1) ~ permutations(numbers, n) 순열들을 구하고 ('1', '7', ) 과 같은 형태의 튜플을 숫자로 변환해서 result 리스트에 넣고 set 으로 중복을 제거한후 리스트 형태로 리턴한다.
# is_prime_number 함수 구현
def is_prime_number(number):
if number < 2:
return 0
for i in range(2, int(number/2 + 1)):
if number % i == 0:
return 0
return 1
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
에라토스테네스의 체를 이용하여 구현하였다. 이는 2부터 number/2 + 1까지의 수중에서 하나 이상으로 나눠떨어지는지 확인 하고 나누어 떨어지면 소수가 아닌 것이고 나누어 떨어지지않으면 소수인것이다.
소수이면 1, 아니면 0을 리턴하도록 구현 하였다.
Tags:
problemsolving
프로그래머스