728x90
반응형
📌 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42839
📌 문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
# 제한사항
- numbers는 길이 1 이상 7 이하인 문자열입니다.
- numbers는 0~9까지 숫자만으로 이루어져 있습니다.
- "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
📌 풀이 과정
- itertools의 permutations를 사용해 길이를 달리하면서 조합을 모두 구하기로 했다.
- permutations인 이유는, '011'이어도 서로 다른 1로 취급해야 하기 때문이다.
- 그 뒤에 numbers를 한 자리씩 분리시켰다. => list(map(str, numbers))
- str로 map한 이유는 나중에 join할 때 그게 더 편하기 때문이다.
- 📢 조합된 문자열의 길이를 증가시키면서 permutations를 돌린다.
- 길이가 l일 때의 문자열을 tmp에 담는다.
- tmp의 요소들마다 숫자로 변환시킨다. => n = int(''.join(t))
- 1보다 크고 & 소수인지 확인하고 & answer에 안 담은 숫자일때만 answer.append(n) 실행한다.
- 결국, answer에는 서로 다른 소수들이 저장되어 있다. => len(answer)를 리턴하면 된다.
📌 풀이 코드
from itertools import *
def prime(n):
for i in range(2, n):
if n%i == 0: return False
return True
def solution(numbers):
answer = []
numbers = list(map(str, numbers))
tmp = []
for l in range(1, len(numbers)+1):
tmp = list(permutations(numbers, l))
for t in tmp:
n = int(''.join(t))
if n > 1 and prime(n) and n not in answer:
answer.append(n)
return len(answer)
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Python] 알고리즘고득점Kit-탐욕법(Greedy)-큰수만들기 (0) | 2024.10.16 |
---|---|
[프로그래머스/Python] 알고리즘고득점Kit-탐욕법(Greedy)-체육복 (2) | 2024.10.14 |
[프로그래머스/Python] 알고리즘고득점Kit - 완전탐색 - 모의고사 (1) | 2024.10.14 |
[프로그래머스/Python] 알고리즘고득점Kit-완전탐색-최소직사각형 (1) | 2024.10.14 |
[프로그래머스/Python] 알고리즘고득점Kit-해시-폰켓몬 (5) | 2024.10.13 |