반응형
문제
에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾는 유명한 알고리즘이다.
이 알고리즘은 다음과 같다.
- 2부터 N까지 모든 정수를 적는다.
- 아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다.
- P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다.
- 아직 모든 수를 지우지 않았다면, 다시 2번 단계로 간다.
N, K가 주어졌을 때, K번째 지우는 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 K가 주어진다. (1 ≤ K < N, max(2, K) < N ≤ 1000)
출력
첫째 줄에 K번째 지워진 수를 출력한다.
예제 입력 1
10 7
예제 출력 1
9
나의 풀이
해당 문제는 구현 문제로 1,2,3,4번에 해당하는 로직을 코드로 짜주면 되는 간단한 문제였다. 필자는 기존에 에라토스테네스의 체를 이 같은 방법으로 작성하지 않았지만 이러한 방법도 있다는 것을 알 수 있는 문제였다.
풀이로는 다음과 같다.
- 2부터 n까지 담긴 리스트를 만들어준다.
- 리스트의 가장 앞의 값을 pop()연산을 통해 삭제 및 변수에 저장을 한다.
- 위에서 저장한 변수에 같은 값을 계속 더해가며 더해진 값이 배열에 존재한다면 지우고 지워지는 숫자들의 리스트에 삽입한다.
- 3번의 과정이 끝나고 아직 1번에서 만든 배열에 값이 남아있다면 2,3번의 과정을 반복한다.
코드
# 2960번 에라토스테네스의 체
n, k = map(int, input().split())
eratos = [i for i in range(2, n+1)]
delete_nums = []
while eratos:
delete_num = eratos.pop(0)
delete_nums.append(delete_num)
tmp = delete_num
while tmp <= n:
if tmp in eratos:
eratos.remove(tmp)
delete_nums.append(tmp)
tmp += delete_num
print(delete_nums[k-1])
반응형
'Programming > Algorithm' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 - Python3 (0) | 2020.11.27 |
---|---|
[프로그래머스] 크레인 인형뽑기 게임 / Python3 (0) | 2020.11.27 |
[백준1442번] 숫자의 신 / Python3 (0) | 2020.10.14 |
[백준1826번] 연료 채우기 / Python3 (0) | 2020.10.13 |
[백준13305번] 주유소 / Python3 (0) | 2020.10.13 |