문제
https://school.programmers.co.kr/learn/courses/30/lessons/42839
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
1. itertools.permutations
def solution(numbers):
answer = set()
numbers = list(numbers)
def is_prime(num):
if num<2:
return False
for i in range(2,int(num**0.5)+1):
if num%i==0:
return False
return True
# 1. permutations
from itertools import permutations
for i in range(1,len(numbers)+1):
s = set(list(map(lambda x:int(''.join(x)), permutations(numbers,i))))
for num in s:
if is_prime(num):
answer.add(num)
return len(answer)
2. 재귀 함수
def solution(numbers):
answer = set()
numbers = list(numbers)
def is_prime(num):
if num<2:
return False
for i in range(2,int(num**0.5)+1):
if num%i==0:
return False
return True
# 2. 재귀
def permutation(numbers,k,res=''):
if len(res)==k:
if is_prime(int(res)):
answer.add(int(res))
return
for _ in range(len(numbers)):
num = numbers.pop(0)
permutation(numbers,k,res+num)
numbers.append(num)
for i in range(1,len(numbers)+1):
permutation(numbers,i)
return len(answer)
3. 재귀 X(BFS)
def solution(numbers):
answer = set()
numbers = list(numbers)
def is_prime(num):
if num<2:
return False
for i in range(2,int(num**0.5)+1):
if num%i==0:
return False
return True
# 3. 재귀 X
from collections import deque
def permutation2(k,res=''):
q = deque()
q.append((numbers,res))
while q:
new_numbers,res = q.popleft()
if len(res)==k:
if is_prime(int(res)):
answer.add(int(res))
continue
for i in range(len(new_numbers)):
q.append((new_numbers[:i]+new_numbers[i+1:],res+new_numbers[i]))
for i in range(1,len(numbers)+1):
permutation2(i)
return len(answer)
DFS, BFS, 재귀 함수등을 활용한 combination, permutation에 대해 연습하자
'알고리즘' 카테고리의 다른 글
[Python] 프로그래머스 - 연속된 부분 수열의 합 (0) | 2024.07.19 |
---|---|
[Python]프로그래머스 - 큰 수 만들기 (0) | 2024.07.01 |
프로그래머스 [Python] - 가장 큰 수 (1) | 2024.06.14 |
[Python]백준 - 11053 : 가장 긴 증가하는 부분 수열 (0) | 2024.05.22 |
[Python] 프로그래머스 - 구명보트 (0) | 2024.05.16 |