2023. 9. 2. 18:59γCoding Test/BOJ
πλ¬Έμ 보λ¬κ°κΈ°
π§π»π»νμ΄ κ³Όμ
Kκ°μ λμ λ€μ μλΌ, λμΌν κΈΈμ΄λ‘ Nκ° μ΄μμ λ§λ κ²½μ°μ μλ€ μ€ κ°μ₯ κΈ΄ λ¨μ κΈΈμ΄λ₯Ό μ°ΎμΌλ©΄ λλ λ¬Έμ μ λλ€.
맀κ°λ³μ νμ(Parametric Search)μ μ΄μ©νμ¬ ν μ μμ΅λλ€. μ¬μ€ 맀κ°λ³μ νμμ΄λ μ©μ΄λ₯Ό μ€λ μ²μ λ€μ΄λ΄€λλ°, λ΄μ©μ 보λ μ κ° μκ² λͺ¨λ₯΄κ² μ¬μ©νλ λ°©λ²μ΄λκ΅°μ.
μκ³ λ¦¬μ¦μ κ°λ¨ν©λλ€.
- λ°°μ΄(arr)μ μ μ₯λμ΄ μλ Kκ°μ λμ λ€μ μ€λ¦μ°¨μ κΈ°μ€μΌλ‘ μ λ ¬ν©λλ€.
- μ΄μ§ νμ(Binary Search)μ μμ©νμ¬ νμμ μμν κ²λλ€.
- leftλ κ°μ₯ μμ κΈΈμ΄(1), rightλ κ°μ₯ κΈ΄ κΈΈμ΄(arr[K-1])μ κ°μ κ°μ§λλ€.
- left \( \leq \) rightκ° λ λκΉμ§, λ€μμ λ°λ³΅ν©λλ€.
- mid = (left + right) / 2 κ°μ ꡬν©λλ€.
- Kκ°μ μΌμ΄λΈμ μ°¨λ‘λλ‘ λλ©°, mid λ¨μλ‘ μλμ λμ κ°μ(cable / mid)λ₯Ό λμ ν΄ μ μ₯ν©λλ€.
- κ·Έλ κ² μ»μ μ΄ κ°μκ° Nκ° μ΄μμ΄λ©΄, left = mid + 1λ‘ λκ³ ν΄λΉ κ°μλ λ³λλ‘ μ μ₯ν΄λ‘λλ€.
- μλλΌλ©΄, last = mid - 1λ‘ λ‘λλ€.
- μμ μ΄μ§ νμμ ν΅ν΄ μ»μ κ²°κ³Όλ₯Ό μΆλ ₯ν©λλ€.
βοΈμμ€ μ½λ λ° κ²°κ³Ό
#include <iostream>
#include <vector>
#include <algorithm>
#define FAST_IO ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
using namespace std;
using uint32 = unsigned int;
uint32 FindLongestCableLength(const vector<int>& cables, const int N)
{
uint32 start = 1, last = cables.back();
uint32 answer = 0;
while (start <= last)
{
uint32 mid = (start + last) / 2;
uint32 count = 0;
for (const auto& cable : cables)
count += (cable / mid);
if (count >= N)
{
answer = mid;
start = mid + 1;
}
else
last = mid - 1;
}
return answer;
}
int main()
{
FAST_IO;
int K, N;
cin >> K >> N;
vector<int> lanCables(K);
for (int i = 0; i < K; i++)
cin >> lanCables[i];
sort(lanCables.begin(), lanCables.end());
int answer = FindLongestCableLength(lanCables, N);
cout << answer;
return 0;
}
λμ μ μ΅λ κΈΈμ΄κ° \( 2^{31} - 1 \)μ΄λΌκ³ νμΌλ―λ‘, int μλ£νμ midλ₯Ό ꡬνλ κ³Όμ μμ μ€λ²νλ‘μ°κ° λ μ μμ΅λλ€.
μ΄λ unsigned intλ₯Ό μ¬μ©νκ±°λ, long longμ μ¬μ©νμ¬ ν΄κ²°ν μ μμ΅λλ€.
κ·Έλ¦¬κ³ μμνλ κ², answer = max(answer, count)λ₯Ό νμ§ μμλ μ λ΅ μ²λ¦¬κ° λλλΌκ΅¬μ. ν¬ννλ€μ.
'Coding Test > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] 1300λ² | Kλ²μ§Έ μ (C++) (0) | 2023.09.06 |
---|---|
[BOJ] 13335λ² | νΈλ (C++) (0) | 2023.09.04 |
[BOJ] 1629λ² | κ³±μ (C++) (0) | 2023.09.01 |
[BOJ] 1780λ² | μ’ μ΄μ κ°μ (C++) (0) | 2023.08.31 |
[BOJ] 1992λ² | μΏΌλνΈλ¦¬ (C++) (0) | 2023.08.31 |