코딩하는 문과생
[알고리즘 풀이][python] 프로그래머스 LV2, '소수 찾기' 본문
<문제 설명>
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers는 길이 1 이상 7 이하인 문자열입니다.
- numbers는 0~9까지 숫자만으로 이루어져 있습니다.
- 013은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
<나의 풀이>
import itertools
def solution(numbers):
n=len(numbers)
temp_list1=[]
temp_list2=[]
# result=[]
for i in range(1, n+1):
my_p = itertools.permutations(numbers,i)
for p in my_p:
temp_list1.append(p)
for i in temp_list1:
x = ('').join(i)
temp_list2.append(int(x))
temp_list2=list(set(temp_list2))
temp_list2.sort()
count = 0
for i in temp_list2:
if i < 2:
pass
elif i == 2:
count += 1
# result.append(i)
else:
for j in range(2, i):
if i % j == 0:
break
elif j ==i-1:
count += 1
# result.append(i)
return count
1. 파이썬에서 itertools 내장 모듈로 순열기능을 제공한다.
2. i = ('1', '3', '4') 튜플을 ('').join(i)를 이용해 '134'로 바꿀 수 있다.
3. 소수 찾기 문제 잘 기억해 두자
<다른사람 풀이>
from itertools import permutations
def solution(n):
# a라는 집합을 선언
a = set()
# list나 set은 매개변수로 map()를 줄 수 있다.
# ex. x = ['1','2','3']
# x = set(map(int, x))
for i in range(len(n)):
a |= set(map(int, map("".join, permutations(list(n), i + 1))))
# a에는 부분집합들이 담겨있다.
# 소수가 아닌 0-1은 제외
a -= set(range(0, 2))
print(a)
# {32, 2, 3, 321, 132, 231, 12, 13, 21, 213, 23, 312, 123, 31}
# 소수 구하는 식
for i in range(2, int(max(a) ** 0.5) + 1):
a -= set(range(i * 2, max(a) + 1, i))
return len(a)
print(solution("123"))
'프로그래밍 > 알고리즘 풀이' 카테고리의 다른 글
[알고리즘 풀이] 프로그래머스 LV3, '정수 삼각형' (0) | 2019.11.18 |
---|---|
[알고리즘 풀이][python] 프로그래머스 LV1 '모의고사' (0) | 2019.11.18 |
[알고리즘 풀이][python] 프로그래머스 LV1, '체육복' (0) | 2019.11.17 |
[알고리즘 풀이][python] 프로그래머스 LV3, '타일 장식물' (0) | 2019.11.17 |
[알고리즘 풀이][python] 프로그래머스 LV2, '타겟 넘버' (0) | 2019.11.17 |