2025. 1. 14. 01:52, 코딩테스트
https://www.acmicpc.net/problem/1978
접근 방식
소수를 찾기 위해서는 먼저 해당하는 수의 약수를 모두 구해서 약수의 총합이 2개라면 소수라고 판결을 내린다 -> O(n)
그러나 위와 같은 방식은 실제 알고리즘 문제 풀이에서 사용하지 않는다!
N의 약수 쌍을 보면 둘중의 작은 값은 무조건 sqrt(N)의 범위 안에 존재한다
12 = > (1,12), (2,6), (3,4)
소수찾기는 모든 수를 보지 않고 sqrt(n) 만큼의 수만 확인해도 소수를 판별 할 수 있다
ex) 12라면 1,2,3,4,5,6,7,8,9,10,11,12 다 보는게 아니라, 1,2,3 까지만 봐도 소수 판별이 가능하다
즉 위와 같은 방식으로 O(n)이 아닌 O(sqrt(n)) 만큼의 시간 복잡도로 줄 일 수 있다
소스코드
N = int(input())
data = list(map(int, input().split()))
answer = 0
for number in data:
sum = 0
if number == 1 :
continue
for j in range(1,number+1):
if j*j > number:
break
if number % j == 0:
sum += 1
if sum == 1:
answer += 1
print(answer)
'코딩테스트' 카테고리의 다른 글
백준 [실버4] 15736 청기 백기 (0) | 2025.01.14 |
---|---|
백준 [실버4] 9417 최대 GCD (0) | 2025.01.14 |
백준 [실버5] 2563 색종이 (0) | 2025.01.14 |
프로그래머스 [Level1] 과일 장수 (0) | 2025.01.14 |
프로그래머스 [Level1] 덧칠하기 (0) | 2025.01.14 |
Comments