Skip to content

Commit 604d7e4

Browse files
committed
[Gold I] Title: K번째 수, Time: 172 ms, Memory: 10840 KB -BaekjoonHub
1 parent e65e78b commit 604d7e4

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
let fs = require('fs');
2+
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
3+
4+
let N = Number(input[0]);
5+
let k = Number(input[1]);
6+
7+
let start = 1;
8+
let end = 10 ** 10;
9+
let answer = 0;
10+
11+
while (start <= end) {
12+
let mid = Math.floor((start + end) / 2);
13+
let total = 0;
14+
15+
for (let i = 1; i <= N; i++) {
16+
total += Math.min(Math.floor(mid / i), N);
17+
}
18+
19+
if (total >= k) {
20+
answer = mid;
21+
end = mid - 1;
22+
} else {
23+
start = mid + 1;
24+
}
25+
}
26+
27+
console.log(answer);
28+
29+
// 1 2 3 4 5
30+
// 2 4 6 8 10
31+
// 3 6 9 12 15
32+
// 4 8 12 16 20
33+
// 5 10 15 20 25
34+
35+
// 실제로 N이 들어오면 배열을 만들어야하나? => 시간복잡도 측면에서안됨
36+
// 왜 이분탐색으로 풀 수 있는지?
37+
// 현재 mid보다 작거나 같은 데이터의 수가 K개 이상이 되는 조건을 만족하는 mid 중에서 가장 작은 값을 구하면 된다.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# [Gold I] K번째 수 - 1300
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1300)
4+
5+
### 성능 요약
6+
7+
메모리: 10840 KB, 시간: 172 ms
8+
9+
### 분류
10+
11+
이분 탐색, 매개 변수 탐색
12+
13+
### 제출 일자
14+
15+
2025년 1월 28일 12:37:07
16+
17+
### 문제 설명
18+
19+
<p>세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자.</p>
20+
21+
<p>배열 A와 B의 인덱스는 1부터 시작한다.</p>
22+
23+
### 입력
24+
25+
<p>첫째 줄에 배열의 크기 N이 주어진다. N은 10<sup>5</sup>보다 작거나 같은 자연수이다. 둘째 줄에 k가 주어진다. k는 min(10<sup>9</sup>, N<sup>2</sup>)보다 작거나 같은 자연수이다.</p>
26+
27+
### 출력
28+
29+
<p>B[k]를 출력한다.</p>
30+

0 commit comments

Comments
 (0)