https://www.acmicpc.net/problem/1978
1978번: 소수 찾기
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
www.acmicpc.net
1. 내가 작성한 코드
n = int(input())
cnt = 0
num = list(map(int, input().split()))
rmv_list=[]
arr = list(range(1,1001))
for i in range(2,1001):
for j in range(2,1001):
if i*j <= 1000:
rmv_list.append(i*j)
result = set(arr) - set(rmv_list)
for n in num:
if n in result:
if n == 1:
pass
else:
cnt += 1
print(cnt)
1~10000까지가 들어있리는 리스트를 만들고 '소수가 아닌 수'를 빼는 과정을 거쳤다.
1은 소수가 아닌데, remove를 할 경우 index가 밀리기 때문에 그냥 if문으로 1만 제외하니 답이 금방 나왔다리
2. 다른 풀이
n = int(input())
number = list(map(int, input().split()))
cnt = 0
arr = [True] * 1001 #1000이하의 자연수
m = int(1000 ** 0.5)
for i in range(2, m+1):
if arr[i] == True:
for j in range(2*i, 1001, i):
arr[j] = False
result = [i for i in range(2,1001) if arr[i] == True]
for k in number:
if k in result:
cnt += 1
print(cnt)
https://gururuglasses.tistory.com/80
[ Algorithm ] 에라토스테네스의 체 ( Python )( 소수를 구하는 방법)
고대 수학자 에라토스테네스가 만들어 낸 소수를 찾는 방법이다. 이 방법은 체로 치듯이 수를 걸러낸다고 해서 '에라토스테네스의 체' 라고 불린다.소수를 구하는 방법은 여러가지가 존재하지
gururuglasses.tistory.com
에라토스테네스의 체를 이용한 풀이
나의 지식이 설명할 수 있는 깊이가 아니라서,, 위의 링크를 참고하면 좋을 것 같다.
'🔅코딩테스트 공부🔅 > ❗백준' 카테고리의 다른 글
[백준] 2941번 크로아티아 알파벳(with python) (0) | 2023.01.21 |
---|---|
[백준] 5622번 다이얼(with python) (0) | 2023.01.21 |
[백준] 1789번 수들의 합(with python) (0) | 2023.01.21 |
[백준] 2908번 상수(with python) (0) | 2023.01.20 |
[백준] 1152번 단어의 개수(with python) (0) | 2023.01.20 |
댓글