백준-1747

0

  • 우선 에라토스테네스의 체를 사용하여 입력의 최대인 1000000보다 10배큰 사이즈의 배열을 생성한 후 소수를 구한다.
  • 반복문을 사용하여 구해진 소수가 펠린드롬 수인지 확인한다.
  • 이는 투 포인터 느낌으로 갔다.
n=int(input())

n_list=[0, 0] + [0]*(10000000)
primes=[]
for i in range(2, 10000001):
    if n_list[i]==0:
        n_list[i]=1
        primes.append(i)
        for j in range(i*2, 10000001, i):
            n_list[j]=1

for i in primes:
    if i>=n:
        temp=list(str(i))
        a=0
        b=len(temp)-1
        while a<=b:
            if temp[a]!=temp[b]:
                break
            else:
                a+=1
                b-=1
        else:
            print(i)
            break
  • 위의 코드가 실행시간이 굉장히 길어 수정을 진행하였다.
  1. 에라토스테네스의 체에서 소수를 구할 때 수를 너무 크게 설정하였다. 그래서 이를 줄였다.
  2. 투 포인터 보다 파이썬에 맞게 리스트를 거꾸로 만들어서 이를 비교하였다.
n=int(input())

n_list=[0, 0] + [0]*(1005000)
primes=[]
for i in range(2, 1005000):
    if n_list[i]==0:
        n_list[i]=1
        primes.append(i)
        for j in range(i*2, 1005000, i):
            n_list[j]=1

for i in primes:
    if i>=n:
        temp=list(str(i))
        if temp==temp[::-1]:
            print(i)
            break

0개의 댓글