https://www.acmicpc.net/problem/5636
5636번: 소수 부분 문자열
숫자로 이루어진 문자열이 주어진다. 이때, 부분 문자열 중에서 가장 큰 소수를 찾는 프로그램을 작성하시오. 이 문제에서는 2보다 크거나 같고, 100,000보다 작거나 같은 소수만 소수이다.
www.acmicpc.net
소수? 부분 문자열?
문제 접근
소수? 에라토스테네스의 체
부분 문자열? [:]
에라토스테네스의 체로 미리 소수를 판별하고, while문을 반복하는 동안 부분문자열을 체크하면 된다.
부분문자열은 최대값을 찾아야 하기 때문에 1부터 순서대로 찾는다면 최대값을 찾을 수 있다.
시간을 조금 더 단축할 방법이 있지않을까 하다가 5자리부터 1자리까지 줄여나가며 탐색을 하고,
각 자리수에서 찾는다면 더 작은 자리수는 찾지않도록 만들었다.
물론 효과는 미미했다.
풀이
from collections import deque
import sys
input = sys.stdin.readline
"""
5636
에라토스테네스의 체로 소수 10만까지 찾아둠
소수 최대길이(5숫자)부터 1자리수까지 줄여나가며 탐색
"""
primeNum = [False]*2 + [True]*(99999)
for i in range(2,int(100000**0.5)+1):
for j in range(i*2, 100001, i):
primeNum[j] = False
while True:
ans = 0
x = input()
if x=="0\n":
break
for i in range(5,0,-1):
if len(x)>i and ans==0:
for j in range(0,len(x)-i):
num = int(x[j:j+i])
if primeNum[num]:
ans = max(num, ans)
print(ans)
136ms
'백준 > 문제풀이_python' 카테고리의 다른 글
1002 터렛 _python (0) | 2022.10.28 |
---|---|
1085 직사각형에서 탈출 _python (0) | 2022.10.28 |
1789 수들의 합 _python (0) | 2022.10.27 |
1743 음식물 피하기 _python (0) | 2022.10.27 |
7569 토마토 _python (0) | 2022.10.27 |
댓글