https://programmers.co.kr/learn/courses/30/lessons/42839
코딩테스트 연습 - 소수 찾기
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이
programmers.co.kr
이번 문제의 핵심은 itertools를 경험하는 것에 있다고 본다.
https://docs.python.org/ko/3.8/library/itertools.html
itertools — 효율적인 루핑을 위한 이터레이터를 만드는 함수 — Python 3.8.12 문서
docs.python.org
permutations()를 보면 "p[,r] / r-길이 튜플들, 모든 가능한 순서, 반복되는 요소 없음"이라 적혀있다.
즉, 모든 조합을 찾아야하는 문제 특성상 r을 1에서 문자열의 길이만큼 줘야하는 것이다.
이후, int로 바꾸고 중복을 제거해주면 된다.
from itertools import permutations
def solution(numbers):
answer = 0
all_list = []
for j in range(1,len(numbers)+1):
for i in permutations(numbers, j):
all_list.append(int("".join(i))) #조합을 하나의 문자열로 합침
all_list = set(all_list) #중복 제거
for al in all_list:
if al == 0 or al == 1: #0과 1이면 소수가 아니고
pass
elif al == 2: #사실 필요없는데
answer += 1
else:
for num in range(2, al): #여기서 해결되는 건데 왜 저랬을까
if al % num == 0:
break #나눠지면 else하단 for문 탈출
if num == al-1: #맨마지막까지 왔으면 소수 확인
answer += 1
return answer
'파이썬 코딩테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 / 124의 나라 / 파이썬 (0) | 2022.02.13 |
---|---|
프로그래머스 / 카펫 / Python (0) | 2021.12.22 |
프로그래머스 / 체육복 / Python (0) | 2021.12.16 |
프로그래머스 / 타겟 넘버 / Python (0) | 2021.12.16 |
프로그래머스 / H-Index / Python (0) | 2021.12.15 |