https://programmers.co.kr/learn/courses/30/lessons/12921
문제 설명
1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)
제한 조건
- n은 2이상 1000000이하의 자연수입니다.
입출력 예
n | result |
10 | 4 |
5 | 3 |
문제 풀이
c++로 풀었던 방식으로,
에라토스테네스의 체 방식으로 풀었다.
그런데 파이썬으로 풀려니 좀 버벅거렸고,
파이썬 특유의 문법으로 정말 간결하게 표현하는 방법도 있었다!
많이 배워야겠다!
solution.py
나의 풀이
def solution(n):
cnt = [True]*(n+1)
c = 0
for i in range(2, int(n**0.5)+1):
if cnt[i]==True: # 만약 소수면
for j in range(i+i, n+1, i):
cnt[j] = False # 소수의 배수는 소수가 아님
for i in range(2, n+1): # 소수 개수 카운트
if cnt[i]:
c+=1
return c
다른 풀이
def solution(n):
num=set(range(2,n+1)) # 2부터 n+1까지의 집합
for i in range(2,n+1): # 2부터 n까지 반복문
if i in num: # 만약 i가 num 집합에 있다면
num-=set(range(2*i,n+1,i)) # i의 배수는 num 집합에서 제외
return len(num) # num에 남아있는 숫자의 개수가 소수의 개수
출처: https://programmers.co.kr/learn/courses/30/lessons/12921/solution_groups?language=python3
'알고리즘 문제풀이 > 문제풀이' 카테고리의 다른 글
[python] 프로그래머스 Level.1 모의고사 (0) | 2020.05.03 |
---|---|
[python] 프로그래머스 Level.1 체육복 (0) | 2020.05.03 |
[python] 프로그래머스 Level.1 K번째수 (0) | 2020.04.28 |
[python] 프로그래머스 Level.1 2016년 (0) | 2020.04.28 |
[python] 프로그래머스 Level.1 나누어 떨어지는 숫자 배열 (0) | 2020.04.28 |