728x90
지금까지 정렬 문제를 풀어봤는데 오늘부터 이분 탐색 문제를 풀어보려고 한다.
문제 1300번
https://www.acmicpc.net/problem/1300
1300번: K번째 수
세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B
www.acmicpc.net
처음에는 벡터를 이용하여 풀어볼까 했는데 뭔가 어려운 느낌이 들어서 찾아보니 이런 식으로 푼 분도 있었다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int n,k;
cin >> n >> k;
int start = 1;
int end = k;
while (start < end) {
int mid = (start + end) / 2;
int cnt = 0;
for (int i = 1; i <= n; i++) {
cnt += min(n, mid / i);
}
if (cnt < k) {
start = mid + 1;
}else {
end = mid;
}
}
cout << end << '\n';
}
이분탐색을 하여 찾으려고 하는 인덱스 값보다 작으면 start를 중간값+1 해주고 아니면 end를 mid로 해줬다.
cnt는 mid보다 작거나 값은 값이다.
[참고] https://velog.io/@murraiya/%EB%B0%B1%EC%A4%80
뭔가 어려워서 내일 다시 한번 풀어봐야겠다.
오늘도 너무 졸리다...
728x90
'백준 > C++' 카테고리의 다른 글
[C++] 백준 2606번 - 바이러스 (3) | 2024.03.05 |
---|---|
[C++] 백준 1260번 - DFS와 BFS (2) | 2024.03.04 |
[C++] 백준 1337번 - 올바른 배열 (0) | 2024.03.01 |
[C++] 백준 2470번 - 두 용액 (2) | 2024.03.01 |
[C++] 백준 2822번 점수 계산 (6) | 2023.12.27 |