728x90
문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항
- numbers는 길이 1 이상 7 이하인 문자열입니다.
- numbers는 0~9까지 숫자만으로 이루어져 있습니다.
- "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
입출력 예
numbers | return |
"17" | 3 |
"011" | 2 |
문제 풀이
💡 접근 방법
- 순열 DFS를 이용해서 경우의 수를 뽑는다.
- 소수인지 판별하여 answer += 1
✏️ 풀이 코드
# 순열
def permutation(n, r):
ans = []
def generate(choose, check_list):
if len(choose) == r:
ans.append(choose.copy())
return
for i in range(len(n)):
if check_list[i] == 0:
check_list[i] = 1
choose.append(n[i])
generate(choose, check_list)
check_list[i] = 0
choose.pop()
generate([], [0] * len(n))
return ans
# 소수 판별
def is_prime_number(number):
if number == 0 or number == 1:
return False
for i in range(2, number):
if number%i == 0:
return False
return True
def solution(numbers):
answer = 0
l = len(numbers)
result = []
# 순열
for i in range(1, l+1):
permu = permutation(numbers, i)
result += [int(''.join(r)) for r in permu]
result = set(result)
# 소수인지 판별
for re in result:
if is_decimal(re):
answer += 1
return answer
🔗 문제 출처
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
728x90
'프로그래머스' 카테고리의 다른 글
[프로그래머스/Level2] 방금그곡 (Python) (1) | 2024.06.18 |
---|---|
[프로그래머스] 순열 검사 (Python) (2) | 2024.06.18 |
[프로그래머스/Level1] 최소직사각형 (Python) (2) | 2024.06.16 |
[프로그래머스/Level2] 가장 큰 수 (Python) (2) | 2024.06.15 |
[프로그래머스/Level3] 디스크 컨트롤러 (Python) (3) | 2024.06.14 |