https://www.acmicpc.net/problem/1300
목적
N*N 크기의 배열 A가 있다. A[i][j]에 i*j를 채워 넣고, 원소를 정렬하여 1차원 배열 B에 넣는다. 이때 B의 K번째 원소를 구하라.
접근법
1. 이분탐색으로 원소를 정하고, 좌우 범위 이동은 원소 크기 이하의 모든 원소 개수를 기준으로 한다.
2. 모든 원소의 개수는 O(n)으로 구해주자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include<iostream>
#include<algorithm>
#define f(i,l,r) for(int i=l;i<=r;++i)
using namespace std;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
int n, k; cin >> n >> k;
int l = 1, r = k;
while (l <= r) {
int num = (l + r) / 2;
long long cnt = 0;
f(i, 1, n) cnt += min(n, num / i);
if (cnt >= k) r = num - 1;
else l = num + 1;
}
cout << l;
}
|
문제 설명과 코드에 대한 피드백은 언제나 환영합니다.
다양한 의견 댓글로 남겨주세요.
'Problem Solving > BOJ 백준' 카테고리의 다른 글
[ BOJ 백준 3430번 - 용이 산다 ] 해설 및 코드 (0) | 2019.12.24 |
---|---|
[ BOJ 백준 1840번 - 스도쿠 ] 해설 및 코드 (0) | 2019.12.18 |
[ BOJ 백준 3020번 - 개똥벌레 ] 해설 및 코드 (0) | 2019.12.17 |
[ BOJ 백준 1939번 - 중량제한 ] 해설 및 코드 (0) | 2019.12.17 |
[ BOJ 백준 11437번 - LCA ] 해설 및 코드 (0) | 2019.12.16 |