문제 설명
한 자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 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은 같은 숫자로 취급합니다.
😎 나의풀이
# 문제이해 : 숫자 조합의 모든 케이스 중, 소수가 몇 개인지 찾기
# 소수? 1과 자기자신만 약수로 가진 수
from itertools import permutations # 모든 경우의 수 찾기 (순열)
# 숫자 조합 중 소수의 갯수를 구해보자.
def cnt_prime(n_case):
p_case = 0
for i in n_case : # 숫자의 조합을 반복한 후
cnt = 0 # 소수가 아닌 수의 갯수를 구할 변수
for j in range (2,i): # 2부터 h-1까지 j에 담고
if i % j == 0: # 숫자의 조합 i와 담은객체 j를 나눈값이 0일때
cnt +=1 # 나누어 떨어지는게 있으면 cnt 에 갯수 더하고
break # 멈춘다.
if i > 1 and cnt == 0: # 나누어 떨어지는게 없고, 1보다 크면
p_case += 1 # 소수리스트 객체에 갯수를 추가한다.
return p_case #소수의 리스트 갯수를 구함
# 숫자 조합의 모든 케이스를 구해보자
def solution(numbers):
n_case = []
# ex) 1,2,3,4,5,6 .. 1과2조합, 2+3조합 등 만들려고
for i in range (1,len(numbers)+1): # 1~ numbers 길이만큼 반복을 한 후 (ex, 1,2,3,4,5,6 ..)
n_plus = permutations(numbers,i) # i가지 만큼 조합 구하기
for j in n_plus:
str_plus = "".join(j) # () 튜플을 벗어나게 한 후
n_case.append(int(str_plus)) # n_case 리스트 객체에 담자.
n_case = list(set(n_case)) # 중복제거, 순서는 뒤죽박죽됨
return cnt_prime(n_case)
😃 다른풀이
from itertools import permutations # 모든 경우의 수 찾기 (순열)
def solution(numbers): #문자열 numbers를 순열로 만들자.
r = []
for i in range (1,len(numbers)+1):
for j in permutations(list(numbers),i):
h = int(''.join(j))
for k in range(2,h): # 2 부터 h 까지 k에 담을 때
if h % k == 0: # h % k 일때
break # 멈추고
else:
if h not in r and h !=0 and h != 1: # h가
r.append(h)
return len(r)
'|Algorithm' 카테고리의 다른 글
3주차 BFS (너비 우선 탐색) / DFS (깊이 우선 탐색) (0) | 2021.06.11 |
---|---|
[2주차]_프로그래머스 Lv1 수포자(완전탐색) . PYTHON (0) | 2021.06.02 |
2주차 완전탐색/이분탐색 (0) | 2021.06.01 |
[1주차]_프로그래머스 Lv2 다리를 지나는 트럭(스택/큐) . PYTHON (0) | 2021.05.23 |
[1주차]_프로그래머스 Lv2 기능개발(스택/큐) . PYTHON (0) | 2021.05.22 |
댓글