반응형
자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요.
만약 20이 입력되면 1부터 20까지의 소수는 2, 3, 5, 7, 11, 13, 17, 19로 총 8개입니다.
제한시간은 1초입니다.
▣ 입력설명
첫 줄에 자연수의 개수 N(2<=N<=200,000)이 주어집니다.
▣ 출력설명
첫 줄에 소수의 개수를 출력합니다.
▣ 입력예제 1
20
▣ 출력예제 1
8
내 풀이:
import sys
sys.stdin=open('H:/Study/CodingTest_Python/input.txt', 'rt')
n = int(input())
n_list = [0]*(n+1) #n_list[0] 에서 n_list[21] 까지 있는 리스트 생성
cnt = 0
for i in range(2, n+1): #2에서 20까지
if n_list[i] == 0: #n_list[2] 2가 0이면
cnt += 1
for j in range(i, n+1, i): #2의배수(n_list[2], [4], [6]...)
n_list[j] = 1
print(cnt)
풀이 설명:
- n_list = [0]*(n+1) : n_list[0] 에서 n_list[n] 까지 있는 리스트 생성한다. 여기서 인덱스 값이 입력값 각각을 의미한다.
예를 들어, 입력값이 20이면 0에서 20까지의 리스트를 만든다고 생각하면 된다.
- for i in range(2, n+1): 어차피 소수는 2부터니까 반복문을 2에서 입력값 까지 도는것으로 설정한다.
- if n_list[i] == 0:
cnt += 1 : n_list[i]값이 0이면 카운트를 1씩 증가한다.
기본값을 0으로 설정했으므로 처음값인 n_list[2]는 카운트가된다.
- for j in range(i, n+1, i):
n_list[j] = 1 : i가 2라면 2의배수에 해당하는 인덱스는 모두 1이되고 3이라면
3의 배수에 해당하는 인덱스 모두 1이된다.
'CodingTest > 기타' 카테고리의 다른 글
[Til] git 명령어 정리 (작성중) (0) | 2022.05.10 |
---|---|
[Python_코테공부] 회문 문자열 검사 (0) | 2021.12.30 |
[Python_코테공부] 주사위 게임 (0) | 2021.12.24 |
[Python_코테공부] K번째 큰 수 (0) | 2021.12.05 |