일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 1일1솔
- dfs
- 파이썬
- 재귀함수
- Algorithm
- python3
- 브루트포스
- 프로그래머스
- Virtual Memory
- 정렬
- Loss
- CS
- 투포인터
- two pointer
- 머신러닝
- Github
- 신나는함수실행
- backtracking
- Python
- 알고리즘
- 재귀
- 코테
- 백준
- 백트래킹
- BF
- OS
- sort
- ML
- 완전탐색
- 코딩테스트
Archives
- Today
- Total
이것저것 공부 기록하기
[Algorithm] 1일1솔 - 백준 2960 에라토스테네스의 체 (python3) 본문
문제링크
https://www.acmicpc.net/problem/2960
문제풀이
n, k = map(int, input().split())
sieve = [True] * (n+1)
m = int(n**0.5)
chk = []
for i in range(2,m+1):
if sieve[i] == True:
chk.append(i)
for j in range(2*i, n+1, i):
sieve[j] = False
if j not in chk:
chk.append(j)
chk += [i for i in range(m+1,n+1) if sieve[i] == True]
print(chk[k-1])
에라토스테네스의 체를 거쳐 완료된 소수가 담긴 리스트를 구하는 것이 아니라, 그 과정을 이해하고 그 과정에서 체크되는 소수와 걸러지는 소수의 배수들을 차례로 체크해야 하는 문제이다.
n 의 최댓값이 1000이라서 시간복잡도 문제는 크게 고려하지 않아도 되기에 chk 리스트를 선언해서 에라토스테네스의 체의 소수와 그 배수들을 담았다.
그 후에 chk에서 k번째로 담긴 (인덱스로 치면 k-1) 수를 출력했다.
뭔가 배열에 담고 체크하는 것보다 카운팅을 바로 하면 시간복잡도에서도 효율적일 것 같아 이후에 배열을 선언하지 않는 방법으로도 시도해봐야겠다.
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[Algorithm] 1일1솔 - 백준 1806 부분합 (python3) (0) | 2021.12.30 |
---|---|
[Algorithm] 1일1솔 - 백준 1929 소수구하기 (python3) (0) | 2021.12.29 |
[Algorithm] 1일1솔 - 백준 1644 소수의 연속합 (python3) (0) | 2021.12.28 |
[Algorithm] 1일1솔 - 백준 10814 나이순정렬 (python3) (0) | 2021.12.24 |
[Algorithm] 1일1솔 - 백준 18258 큐2 (python3) (0) | 2021.12.17 |
Comments