티스토리 뷰
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | def sieve(n): if n < 2: return [] s = [0, 0] + [1] * (n - 1) for i in range(2, int(n**.5)+1): if s[i]: s[i*2::i] = [0] * ((n - i)//i) return [i for i, v in enumerate(s) if v] arr=sieve(10000) index=168 #168 인덱스부터 1000 이상임 for i in range(index,len(arr)): number1=(str)(arr[i]) number2=(str)(arr[i]+3330) number3=(str)(arr[i]+6660) if((int)(number2) in arr and (int)(number3) in arr): list1=[] list2=[] list3=[] for j in range(0,4): list1.append((int)(number1[j])); list2.append((int)(number2[j])); list3.append((int)(number3[j])); list1.sort() list2.sort() list3.sort() if(list1==list2 and list2==list3 and list1==list3): print(number1+number2+number3) #반환 시간 : 0.02s | cs |
먼저 이전에 사용했던 에라토스테네스의 체를 이용하여 10000까지의 소수를 구하고
원하는 것은 1000부터의 소수이기 때문에 미리 1000 이상이 나오는 소수 리스트의 인덱스를 구하였다.
(출처 : http://codingdojang.com/scode/503)
등차수열의 관계를 가지는 세 수를 각각 선언하고
이것들이 소수 리스트 안에 있으면
각각의 리스트에 넣어 두고 sort()를 이용해 오름차순으로 정리해 놓고
정렬된 리스트들이 서로 같으면 답이 나오게 하였다.
1000부터 9999까지의 소수 리스트에서 이러한 경우는 두 가지가 나오고
문제에서 첫 번째 경우를 예시로 들었으므로
두 번째에 나오는 경우가 답이 된다.
'Algorithm > Project Euler' 카테고리의 다른 글
프로젝트 오일러 23번 (0) | 2017.07.07 |
---|---|
프로젝트 오일러 53번 (0) | 2017.07.06 |
프로젝트 오일러 24번 (0) | 2017.07.05 |
프로젝트 오일러 35번 (0) | 2017.07.04 |
프로젝트 오일러 28번 (0) | 2017.07.04 |
댓글