λ¬Έμ μμ½
- n: μ κ΅ μ¬μ¬λ₯Ό κΈ°λ€λ¦¬λ μ¬λμ μλ μ΅λ 10μ΅
- times: κ° μ¬μ¬κ΄μ΄ ν μ¬λμ μ¬μ¬νλ λ° κ±Έλ¦¬λ μκ°μ΄ μ΅λ 10μ΅, μ¬μ¬κ΄ μλ μ΅λ 10λ§
=> μ.. μ‘°κ±΄μ΄ μΌλ¨ 그리λλ μ‘°ν©μ μλ κ² κ°λ€.
π μ£Όμ ν¬μΈνΈ
- μ¬μ¬κ΄λ€μ λμμ μ¬λ¬ λͺ μ μ²λ¦¬ν μ μλ λ³λ ¬ μ²λ¦¬ ννμ΄λ€.
- κ° μ¬μ¬κ΄μ μ£Όμ΄μ§ μκ°λμ ν μ¬λμ© μ¬μ¬νλ€.
ν΅μ¬ μμ΄λμ΄
μ΅μ μκ°μ min(times) ~ μ΅λ μκ°μ max(times) * n (= μ΅μ
μ κ²½μ° ν μ¬μ¬κ΄μ΄ λͺ¨λ μ¬λμ μ²λ¦¬)
λ°λΌμ, ν¨μ¨μ μΈ νμμ΄ νμνλ€.
κ²°μ λ¬Έμ λ‘ μ ν
νΉμ μκ° λ΄μ λͺ¨λ nλͺ
μ μ¬μ¬κ° κ°λ₯νκ°? λΌλ κ²°μ λ¬Έμ λ‘ μ ννκΈ°!
μ¬μ¬ κ°λ₯ μ¬λΆμ λ°λΌ νΉμ μκ°μ λ리거λ μ€μ΄λ©΄μ κ°λ₯ν μκ°μ μ°Ύμ => μ΄λΆ νμ
=> μ΄λΆ νμμΌλ‘ μ΅μ μ μ΅μ μκ°μ μ°Ύλλ€. 쑰건 κ²μ¬λ₯Ό κ³ λ―Όν΄λ³Έλ€.
ꡬν λ‘μ§ κ²°μ
1. μ΄λΆ νμ λ²μ μ€μ νκΈ°
- μ΅μ μκ° ~ μ΅λ μκ°
2. μ΄λΆ νμ μννκΈ°
1) μ€κ° μκ° κ³μ° (νμ μμν κ³³)
2) ν΄λΉ μκ° λ΄μ μ¬μ¬ κ°λ₯ν μΈμ κ³μ° (κ° μ¬μ¬κ΄μ κ°λ₯ μΈμμ ν©μ°)
3) 쑰건μ λ°λΌ λ²μ μ΄λ
3-1) κ°λ₯ μΈμμ΄ n λ―Έλ§μ΄λ©΄, ν΄λΉ μκ° λ΄μ λΆκ°λ₯νλ€! => μκ°μ λλ¦°λ€. left = mid + 1
3-2) κ°λ₯ μΈμμ΄ n μ΄μμ΄λ©΄, ν΄λΉ μκ° λ΄μ κ°λ₯νλ€!
=> μΌλ¨ μ΄ κ°μ ν보νκ³ , λ 짧μ μκ°μ΄ κ°λ₯νκ° μ°λ¬λ³΄μ!
=> μκ°μ μ€μΈλ€. right = mid - 1
4) μ’ λ£ μ‘°κ±΄μ μ΄λΆ νμ μλ£ μ (left <= right)
π κΈ°μ΅ν λΆλΆ!!
1. κ²°μ λ¬Έμ λ‘ λ³ννκΈ°
- "μ΄ μκ° λ΄μ λͺ¨λ μ¬μ¬κ° κ°λ₯νκ°?" λ‘ λ°κΎΈλ©΄, yes or noλ‘ νλ¨ κ°λ₯νλ€.
2. μ΄λΆ νμ ν¨ν΄μ 무μμΌκΉ?
- μ΄ λ¬Έμ λ μ΄λΆ νμμ κ²°μ λ¬Έμ (Parametric Search) μ νμ΄λ€.
- "μ΅μ μκ°", "μ΅λ κΈΈμ΄", "μ΅μ λΉμ©" λ± λ€μν μ νμ νμ©ν μ μλ€. => 쑰건 λ§μ‘± μ¬λΆλ‘ νλ³ν μ μμκΉ μκ°ν΄λ³΄μ.
βοΈ μ£Όμν λΆλΆ
1. λ°λ³΅λ¬Έ μ€μ
while(left <= right){
long mid = (left + right)/2;
// 2. κ° μ¬μ¬κ΄λ³ μ²λ¦¬ κ°λ₯ν μΈμ ꡬνκΈ° => μ΄ μ²λ¦¬ κ°λ₯ μΈμ
long cnt = 0;
for (int i=0; i<size; i++){
cnt += mid/times[i];
}
if (cnt < n) {
// 3-1. nλͺ
λ³΄λ€ μ μΌλ©΄ mid μκ° λ리기
left = mid+1;
} else if (cnt >= n){
// 3-2. nλͺ
λ³΄λ€ ν¬κ±°λ κ°μΌλ©΄ μΌλ¨ νμ¬ κ° μ μ₯νκ³ , mid μκ° μ€μ΄κΈ°
answer = mid;
right = mid -1;
}
}
- λ°λ³΅ 쑰건 :
left <= right
- 쑰건 λΆκΈ° μ€μ : μ²μμλ ifλ¬Έ λΆκΈ°λ₯Ό 3κ°λ‘ νλ€. (cnt < n / cnt > n / cnt == n)
=> cnt >= n μΌλ‘ ν΄μ£Όμ΄μΌ νλ€. μκ°μ΄ 짧μμ§ μ μμλ§νΌ 짧μμ ΈμΌ νκΈ° λλ¬Έμ (μ΅μ μκ°)
2. λ°μ΄ν° νμ μ€λ²νλ‘μ°
long μΌλ‘ ν΄μ£Όμ΄μΌ ν λΆλΆμ λͺ¨λ longμΌλ‘ νμ§λ§ μ€ν¨νλ€.
times λ°°μ΄μ΄ int μλλ° timesμ μμμ μ°μ°νλ λΆλΆμ΄ μμκΈ° λλ¬Έμ κ²°κ³Όκ°μ΄ intλ‘ λ³νλμκ³ μ€λ²νλ‘μ°κ° λ°μν΄λ²λ Έλ€.
long left = times[0];
long right = (long)times[size-1] * n;
λ³΅μ΅ ν¬μΈνΈ
νλͺ© | μμ |
---|---|
μ΄λΆ νμ λ²μ | left = 1, right = maxκ° * κ°μ |
mid κ³μ° | mid = (left + right) / 2 |
쑰건 | if (쑰건 λ§μ‘±) → answer μ μ₯νκ³ right = mid - 1 |
μλ£ν | long (int μ£Όμ) |
https://school.programmers.co.kr/learn/courses/30/lessons/43238
'μκ³ λ¦¬μ¦ νμ΅' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ¬Έμ νμ΄] λ°±μ€ 5427 λΆ (1) | 2025.02.14 |
---|---|
[λ¬Έμ νμ΄] λ°±μ€ 1697 μ¨λ°κΌμ§ (1) | 2025.02.13 |
[λ¬Έμ νμ΄] SWEA 4615. μ¬λ―Έμλ μ€μ λ‘ κ²μ (0) | 2024.08.12 |
[λ¬Έμ νμ΄] ν볡ν μμ΄μ κ°μ (feat. μ½λνΈλ¦¬ μ‘°λ³κ³Όμ : 4μ£Όμ°¨) (3) | 2024.08.11 |
[μ΄λ‘ ] λ°°μ΄ (feat. μ½λνΈλ¦¬ μ‘°λ³κ³Όμ : 3μ£Όμ°¨) (1) | 2024.08.04 |