😊백준_소수 구하기) https://www.acmicpc.net/problem/1929
😊프로그래머스_소수찾기)https://programmers.co.kr/learn/courses/30/lessons/42839
위와 같은 문제들을 풀며 소수 찾기 문제를 풀 때 원래 방식으로 풀면
시간 초과가 발생할 것이라는 생각이 들었다.
🙄 초기 코드)
for i in range(M,N+1): #소수찾기
if i==2: #2는 소수
arr.append(i)
for j in range(2,i):
if i%j==0: #나눠지는 것이 있으면 소수가 아님
break
if j==i-1: #나눠지는 것이 없으면 소수
arr.append(i)
- 이중 반복문을 사용하여 나눠지는 것이 있는지 없는지 판별한다.
여태 풀었던 문제에서 내가 사용했던 방식이다. 단계가 낮은 문제여서 시간 초과도 발생하지 않았었다.
이 방법으로는 한계..가 있다는 것을 알게 되었다.
🙄 새로운 코드)
사실, 새로운 방법이라고 할 것도 없다. 내가 늦게 이 방법을 이해(?) 적용(?)한 것 뿐...
'소수'라고 하면 다들 말하는 '에라토스테네스의 체'이다.
* 에라토스테네스의 체
= 소수를 찾는 방법이다.
- 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다.
- 2는 소수이므로 제외하고 2의 배수를 모두 지운다.
- 3도 소수이므로 제외하고 3의 배수를 모두 지운다.
- 위의 과정을 반복하면 구간의 모든 소수가 남는다.
위의 설명을 코드로 구현하면
arr=[True]*(N+1)
line=int((N+1)*0.5)
for i in range(2,line+1):
if arr[i]==True:
for j in range(i+i,N+1,i):
arr[j]=False
매번 미루다가 드디어 정리했다 🤗
'☁️정리 > ❄️알고리즘' 카테고리의 다른 글
[Algorithm] LCS (Longest Common Subsequence, 최장 공통 부분 수열) (0) | 2023.10.18 |
---|---|
[Algorithm] 피사노 주기 (Pisano period) (0) | 2023.06.02 |
[Algorithm] DFS/BFS (0) | 2022.01.15 |
[Algorithm] 순차 탐색, 이진 탐색 (0) | 2021.10.20 |
[Algorithm] 최소공배수, 최대공약수 (0) | 2021.08.23 |