알고리즘(algo)/프로그래머스
[프로그래머스] 완전탐색 - 소수 찾기
dDong2
2023. 2. 16. 12:09
참고: https://school.programmers.co.kr/learn/courses/30/lessons/42839
✔️ 문제
문제는 다음과 같다.
✔️ 풀이
주어진 numbers의 숫자로 숫자 조합을 만들 때,
각 조합에 해당하는 숫자가 소수인 경우를 카운트하는 문제이다.
from itertools import permutations
def is_prime(x):
if x == 0 or x == 1:
return False
for i in range(2, x):
if x % i == 0:
return False
return True
def solution(numbers):
data = list(map(str, numbers))
result = []
for i in range(1, len(data)+1):
result.append(list(set(permutations(data, i))))
new = []
for i in range(len(result)):
for j in range(len(result[i])):
new.append(int(''.join(result[i][j])))
new = list(set(new))
answer = 0
for i in range(len(new)):
if is_prime(new[i]) == True: answer+=1
return answer
다음과 같이 순열을 이용하여 문제를 풀었는데,
주어진 numbers를 리스트로 쪼개어 순열을 만들어준다.
해당 조합된 순열을 문자열로 합치고, int형으로 형변환하여
새로운 new 리스트에 추가해준 뒤 중복을 제거한다.
(11과 011은 같은 숫자로 취급해야하기 때문에 제거한다)
new 리스트를 돌면서 소수인지 검사하여 True이면
answer 값에 1씩 추가하여 리턴하였다.
더 간단한 풀이가 있나해서 찾아보는데,
에라토스테네스 체를 이용하여 빠르게 소수를 찾는 방법도 있다..
화이팅 💪