반응형
[문제]
세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자.
배열 A와 B의 인덱스는 1부터 시작한다.
입력
첫째 줄에 배열의 크기 N이 주어진다. N은 105보다 작거나 같은 자연수이다. 둘째 줄에 k가 주어진다. k는 min(109, N2)보다 작거나 같은 자연수이다.
출력
B[k]를 출력한다.
[소스 코드]
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int N, K;
cin >> N >> K;
int s, e, m;
int result = 0;
s = 1;
e = K;
while (s <= e)
{
m = (s + e) / 2;
int cnt = 0;
for (int i = 1; i <= N; i++)
{
cnt += min(N , m / i);
}
//적을땐
if (cnt < K)
{
s = m + 1;
}
else
{
result = m;
e = m - 1;
}
}
cout << result;
return 0;
}
[피드백]
배열을 사용하지 않고 이분탐색으로 구하는 방법을 몰랐다. 임의의 검색값을 통하여, 배열의 숫자보다 임의의 검색값이 크면 카운트 되는 방법으로 순서를 구할수있다.
반응형
'알고리즘' 카테고리의 다른 글
[백준 알고리즘 c++] 문제 72. 절댓값 힙 11286 (0) | 2022.09.08 |
---|---|
[백준 알고리즘 c++] 문제 71. 가장 긴 증가하는 부분 수열 2 12015 (0) | 2022.09.08 |
[백준 알고리즘 c++] 문제 69. 최소 힙 1927 (0) | 2022.09.08 |
[백준 알고리즘 c++] 문제 68. AC 5430 (0) | 2022.09.07 |
[백준 알고리즘 c++] 문제 67. 회전하는 큐 1021 (0) | 2022.09.07 |