https://www.acmicpc.net/problem/1978
1978번: 소수 찾기
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
www.acmicpc.net
보통의 방법으로 풀 수 없음은 짐작했지만 에라토스테네스의 체를 이용해 풀어야 함은 떠올리지 못했다.
알고리즘 분류를 보고 직접적인 힌트를 얻었고, 조금의 복습이 필요했다.
알고자하는 수보다 작거나 같은 수를 대상으로 진행하면 된다.
1보다 큰 자연수의 배수를 지우는 방식이다. 이때, 만약 n의 배수라면 n을 제외한 모든 배수를 지우는 것이다.
설명이나 코드로 이해하기 난해할 수 있다.
그림으로 이해하는 편이 훨씬 쉽다.
내 방식이 더 복잡한지 아닌지는 모르겠으나..(복잡할듯하다)
더 직관적이며 순차적으로 해결하는 데에 초점을 맞췄다.
알고자 하는 수를 리스트로 받고, 그 중 가장 큰 수를 알아낸다.
이 수의 +1만큼 boolean list를 만들어준다.
우선 모두 True 취급해주고, 2의 배수부터 해당되는 수는 False로 변환해주는 방식이다.
가장 큰 수(large변수)보다 큰 배수는 다룰 가치가 없으므로 break.
최종적으로 남은 True는 소수가 된다.
이때, 1은 소수가 될 수 없음으로 1을 제외해주는 걸 잊지 말아야 한다.
+)파이썬은 내게 어렵다..ㅜ
import sys
N = int(input())
nums = list(map(int, sys.stdin.readline().split()))
nums.sort()
last = nums[N-1]
task = [True] * (last+1)
for i in range(2, last):
j = 2
while True:
temp = i * j
if temp > last:
break
if task[temp] == True:
task[temp] = False
j = j + 1
count = 0
for n in nums:
if task[n] == True:
if n == 1:
continue
else:
count = count + 1
print(count)
'[Python]BaekJoon.AC' 카테고리의 다른 글
[Python]백준 BaekJoon.AC 9012 : 괄호(스택, 리스트) (0) | 2022.01.21 |
---|---|
[Python]백준 BaekJoon.AC 4949 : 균형잡힌 세상(list, stack) (0) | 2022.01.21 |
[Python]백준 BaekJoon.AC 2164 : 카드2(deque, queue) (0) | 2022.01.20 |
[Python]백준 BaekJoon.AC 2108 : 통계학(Counter, sum) (0) | 2022.01.20 |
[Python]백준 BaekJoon.AC 1920 : 수 찾기(이분탐색) (0) | 2022.01.19 |
[Python]백준 BaekJoon.AC 11651 : 좌표 정렬하기2(sys, sort()) (0) | 2022.01.16 |
[Python]백준 BaekJoon.AC 11650 : 좌표 정렬하기(sys, sort()) (0) | 2022.01.15 |
[Python]백준 BaekJoon.AC 10989 : 수 정렬하기3(sys, list) (0) | 2022.01.14 |