File tree Expand file tree Collapse file tree 2 files changed +67
-0
lines changed
Expand file tree Collapse file tree 2 files changed +67
-0
lines changed Original file line number Diff line number Diff line change 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 중에서 가장 작은 값을 구하면 된다.
Original file line number Diff line number Diff line change 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+
You can’t perform that action at this time.
0 commit comments