유형 : 구현 (소수 판별)
풀이 시간 : 15분 -> 인터넷 서치
소수 판별을 효율적으로 하려면, 에라스토테네스의 체 원리를 이용해야 한다.
1. 기본 : set, 에라스토테네스의 체 이용하기
def solution(n):
answer = set([i for i in range(2, n+1)])
for i in range(2, int(n ** 0.5) + 1):
if i in answer:
mul = set([x for x in range(i*2, n+1, i)])
answer -= mul
return len(list(answer))
- 체크 (순회) : n ** 0.5 + 1 / math.sqrt(n) +1 까지만 하면됨,
- answer에 있다면 체크
=> i의 배수 set 만들기
=> answer에서 빼 주기
2. 더 효율적인 알고리즘 : list 사용
초기값 = True
소수가 아님이 확인되면 = False
def solution(n):
answer = [True for i in range(0, n+1)]
answer[0], answer[1] = False, False
for i in range(2, int(n ** 0.5) + 1):
if answer[i] == True:
for x in range(i*2, n+1, i):
answer[x] = False
return list(answer).count(True)
'프로그래머스 > Lv. 1' 카테고리의 다른 글
41. 옹알이 (2) (0) | 2024.07.16 |
---|---|
40. 실패율 (1) | 2024.07.16 |
38. 소수 만들기 (소수 판별 알고리즘) (0) | 2024.07.16 |
37. 과일 장수 (1) | 2024.07.14 |
36. 모의고사 (0) | 2024.07.14 |