728x90
<문제 설명>
https://programmers.co.kr/learn/courses/30/lessons/42839
한자리 숫자가 적힌 종이 조각을 붙여 몇 개의 소수를 만들 수 있는지 찾는 문제이다.
0부터 9까지의 숫자가 적힌 조각이 있으며, 숫자는 중복 될 수 있다.
11과 011은 같은 숫자 취급을 한다는 것을 유의하면서 문제를 해결하면 된다.
입출력의 예는 다음과 같다.
numbers | return |
"17" | 3 |
"011" | 2 |
<문제 풀이 아이디어>
우선 소수를 판별하는 함수를 따로 isPrime()으로 정의한다.
이후 permutations 라이브러리를 이용해 주어진 number 값의 순열값들을 리스트(result)에 extend로 저장한다.
이 값을 int(''.join(i)) 문을 통해 정수로 변환하는 작업을 거치면서 011같은 값을 11로 변환한다.
마지막으로 result의 리스트를 set()을 통해 중복을 제거한 후, 소수 판별 함수에 하나씩 넣으면서 소수인지 판별하고,
최종적으로 소수가 몇 개인지 리턴한다.
<문제 풀이 코드>
import math
from itertools import permutations
def solution(numbers):
answer = 0
p = []
result = []
for i in range(1, len(numbers)+1):
p.extend(permutations(numbers, i)) #permutations 순열
result = [int(''.join(i)) for i in p]
#int(''.join(i)) 정수 변환 부분, 011 -> 11
for i in set(result):
if isPrime(i):
answer+=1
return answer
# 소수 판별 함수
def isPrime(n):
if n < 2:
return False
for i in range(2, n//2+1):
if n%i == 0:
return False
return True
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준 실버2] 1260 DFS와 BFS.py (0) | 2022.02.22 |
---|---|
[백준 실버4] 10816 숫자카드2.py (1) | 2022.02.18 |
[자료구조] 완전탐색, 이분탐색 (0) | 2022.02.15 |
[프로그래머스 lv 2] 다리를 지나는 트럭.py (0) | 2022.02.11 |
[프로그래머스 lv 2] 기능개발.py (0) | 2022.02.11 |