728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42839
문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
제한사항- numbers는 길이 1 이상 7 이하인 문자열입니다.
- numbers는 0~9까지 숫자만으로 이루어져 있습니다.
- "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다.
풀이
Code
def solution(numbers):
# 1. 백트래킹 함수 생성
def backtracking(number, lst) :
# 1-1. 종료 조건 설정
if not lst : return
# 1-2.
for i in range(len(lst)) :
# 다음 수 만들기
number += lst[i]
# 소수 판별
if array[int(number)] : answer.add(int(number))
# 백트래킹 함수 실행
backtracking(number, lst[:i] + lst[i+1:])
# 숫자 되돌리기
number = number[:-1]
# 2. 에라토스테네스의 체를 통한 소수 판별 리스트 생성
array = [True] * 10000000
array[0], array[1] = False, False
for i in range(2, 10000000 // 2 + 1) :
if array[i] :
for j in range(i*2, 10000000, i) :
array[j] = False
# 3. 결과 출력 변수 생성
answer = set()
# 4. 백트래킹 실행
backtracking('', numbers)
# 5. 결과출력
return len(answer)
728x90
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[Python/Programmers] 롤케이크 자르기 (0) | 2023.08.20 |
---|---|
[Python/Programmers] 뒤에 있는 큰 수 찾기 (0) | 2023.08.20 |
[Python/Programmers] 연속된 부분 수열의 합 (0) | 2023.08.14 |
[Python/Programmers] 큰 수 만들기 (0) | 2023.08.14 |
[Python/Programmers] 입국심사 (0) | 2023.08.10 |