https://www.acmicpc.net/problem/2960
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- N, K가 주어졌을 때, K번째 지우는 수를 구하라 - 주어진 자료는 무엇인가?
- N = 정수
- K = 정수 - 조건은 무엇인가?
- 1 ≤ K < N, max(1, K) < N ≤ 1000
2. 계획
- 2부터 N까지 모든 정수를 적는다.
- 아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다.
- P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다.
- 아직 모든 수를 지우지 않았다면, 다시 2번 단계로 간다.
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (n, k) => {
// 2부터 N까지 모든 정수를 적는.다
let numbers = [];
for (i = 2; i <= n; i++) {
numbers.push(i)
}
// 아직 지우지 않은 수 중 가장 작은 수를 찾는다.이것을 P라고 하고, 이 수는 소수이다.
let p = numbers[0];
let count = 0;
let prime = [];
// P를 지우고, 아직 지우지 않은 P의 배수를 크기 순서대로 지운다.
while (numbers.length > 0) {
if (count > k) {
break;
}
prime.push(p);
let num = numbers[0];
numbers[0] = null;
count = count + 1;
if (count === k) {
return num
}
for (i = 1; i * p < numbers.length; i++) {
const number = numbers[i * p]
numbers[i * p] = null;
count = count + 1;
if (count === k) {
return number;
}
}
numbers = numbers.filter((it) => it !== null);
p = numbers[0];
}
return p;
}
4. 반성
- 배열이 아닌 객체를 사용해서 풀어볼 수도 있을 것 같다.
'코테연습' 카테고리의 다른 글
116. 이진 변환 반복하기 Javascript (0) | 2022.09.12 |
---|---|
115. 최댓값과 최솟값 Javascript (0) | 2022.09.12 |
111. 백준 : 2839 설탕 배달 Javascript (0) | 2022.09.08 |
107. 이것이 코딩 테스트다 9장 : 미래 도시 Javascript (0) | 2022.09.05 |
106. 이것이 코딩 테스트다 8장 : 효율적인 화폐 구성 Javascript (0) | 2022.09.04 |
댓글