728x90
2960번: 에라토스테네스의 체
2, 4, 6, 8, 10, 3, 9, 5, 7 순서대로 지워진다. 7번째 지워진 수는 9이다.
www.acmicpc.net
크기 n + 1짜리 bool 타입의 벡터 v를 선언하여 다음과 같이 true로 초기화시켰다.
그 다음 지울 때마다 false로 바꿔주었다.
그리고 지울 때마다 index를 1 증가시켰다. index는 몇 번째 지운 것인지를 나타낸다.
지우지 않은 숫자들 중에 가장 작은 수는 num에 저장했다.
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<bool> v(n + 1, true);
int index = 1;
int answer = -1;
while (true) {
int num;
for (int i = 2; i <= n; i++) {
if (v[i]) {
num = i;
v[i] = false;
if (index == k) {
answer = i;
}
index++;
break;
}
}
if (answer != -1)
break;
int a = 2;
while (a * num <= n) {
if (v[a * num]) {
v[a * num] = false;
if (index == k) {
answer = a * num;
break;
}
index++;
}
a++;
}
if (answer != -1)
break;
}
cout << answer;
return 0;
}
728x90
'알고리즘 문제' 카테고리의 다른 글
[백준] 1963번 소수 경로 (0) | 2021.01.15 |
---|---|
[백준] 11725번 트리의 부모 찾기 (0) | 2021.01.14 |
[백준] 1890번 점프 (0) | 2021.01.13 |
[백준] 1676번 팩토리얼 0의 개수 (0) | 2021.01.13 |
[백준] 1107번 리모컨 (0) | 2021.01.11 |