π λ¬Έμ
nλͺ μ΄ μ κ΅μ¬μ¬λ₯Ό μν΄ μ€μ μμ κΈ°λ€λ¦¬κ³ μμ΅λλ€. κ° μ κ΅μ¬μ¬λμ μλ μ¬μ¬κ΄λ§λ€ μ¬μ¬νλλ° κ±Έλ¦¬λ μκ°μ λ€λ¦ λλ€.
μ²μμ λͺ¨λ μ¬μ¬λλ λΉμ΄μμ΅λλ€. ν μ¬μ¬λμμλ λμμ ν λͺ λ§ μ¬μ¬λ₯Ό ν μ μμ΅λλ€. κ°μ₯ μμ μ μλ μ¬λμ λΉμ΄ μλ μ¬μ¬λλ‘ κ°μ μ¬μ¬λ₯Ό λ°μ μ μμ΅λλ€. νμ§λ§ λ 빨리 λλλ μ¬μ¬λκ° μμΌλ©΄ κΈ°λ€λ Έλ€κ° κ·Έκ³³μΌλ‘ κ°μ μ¬μ¬λ₯Ό λ°μ μλ μμ΅λλ€.
λͺ¨λ μ¬λμ΄ μ¬μ¬λ₯Ό λ°λλ° κ±Έλ¦¬λ μκ°μ μ΅μλ‘ νκ³ μΆμ΅λλ€.
μ κ΅μ¬μ¬λ₯Ό κΈ°λ€λ¦¬λ μ¬λ μ n, κ° μ¬μ¬κ΄μ΄ ν λͺ μ μ¬μ¬νλλ° κ±Έλ¦¬λ μκ°μ΄ λ΄κΈ΄ λ°°μ΄ timesκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, λͺ¨λ μ¬λμ΄ μ¬μ¬λ₯Ό λ°λλ° κ±Έλ¦¬λ μκ°μ μ΅μκ°μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
π μ νμ¬ν
- μ κ΅μ¬μ¬λ₯Ό κΈ°λ€λ¦¬λ μ¬λμ 1λͺ μ΄μ 1,000,000,000λͺ μ΄νμ λλ€.
- κ° μ¬μ¬κ΄μ΄ ν λͺ μ μ¬μ¬νλλ° κ±Έλ¦¬λ μκ°μ 1λΆ μ΄μ 1,000,000,000λΆ μ΄νμ λλ€.
- μ¬μ¬κ΄μ 1λͺ μ΄μ 100,000λͺ μ΄νμ λλ€.
π νμ΄
μ νμ¬νμ 보면 μ΅λ κΈ°λ€λ¦¬λ μ¬λμ 10μ΅, 1λͺ μ΄ μ¬μ¬νλλ° κ±Έλ¦¬λ μκ°μ 10μ΅λΆ μ΄ν. λ¨μ ꡬνμΌλ‘λ μκ° μ΄κ³Όλ κ°λ₯μ±μ΄ λ§€μ° λλ€. μ΄λ»κ² μ κ·Όν΄μΌ ν μ§ κ³ λ―Όνλ€. λͺ¨λ μ¬λμ μ¬μ¬νλλ° κ±Έλ¦¬λ μ΅λ μκ°μΌλ‘ μ΄λΆ νμμ ν΄λ³΄μ.
μ¬μ¬νλλ° κ±Έλ¦¬λ μ΅λ μκ° = 1λͺ
μ¬μ¬νλλ° κ±Έλ¦¬λ μ΅λ μκ° x μ΅λ μ¬μ¬κ΄ μ
μ¦, 10μ΅λΆ x 10λ§λͺ
μΌλ‘ 100μ‘°κ° λμ¨λ€... (long νμ
μ 100μ‘° μ»€λ² κ°λ₯)
min κ°μ 1, maxλ₯Ό 100μ‘°λ‘ λκ³ μ€κ°κ°(mid)μ μ 체 걸리λ μκ°(totalTime)μΌλ‘ κ°μ νλ€. μ΄λ λͺ¨λ μ¬μ¬κ΄μ΄ totalTime λμ λͺλͺ μ μ¬μ¬ ν μ μλμ§ μΉ΄μ΄νΈ νλ€. λ§μ½μ μ¬μ¬λ₯Ό κΈ°λ€λ¦¬λ μ¬λ μ(n)λ³΄λ€ ν¬κ±°λ κ°μΌλ©΄, minκ³Ό mid μ¬μ΄μ μ΅μκ°μ΄ μλ€. λ§μ½μ μλ€λ©΄, midμ max μ¬μ΄μ μ΅μκ°μ΄ μλ€. μ΄λ₯Ό μ΄μ©νλ©΄ μνλ κ²°κ³Όλ₯Ό μ»μ μ μλ€.
μ½κ² μκΈ°νμλ©΄ μ«μ λ§μΆκΈ° κ²μκ³Ό κ°λ€. 1λΆν° 100κΉμ§ μ«μμ€μ νκΈΈλμ΄ μκ°νλ μ«μλ₯Ό λ§μΆ°λ³΄μ. 1λΆν° 100κΉμ§ μκΈ°νλ€λ³΄λ©΄ μΈμ κ° λμ¬ κ²μ΄λ€. νμ§λ§ λΉν¨μ¨μ μ΄μ§ μμκ°? λ΄κ° μ μνλ μ«μμ λν΄μ νκΈΈλμ ν¬κ±°λ μμμ§λ§ μκΈ°ν΄μ€λ€κ³ ν΄λ³΄μ. κ·Έλ¬λ©΄ μλμ κ°μ΄ μ½κ² λ΅μ μ°Ύμ μ μλ€.
νκΈΈλμ΄ μκ°νλ μ«μ: 70
50 -> ν¬λ€. (50λ³΄λ€ ν¬κ³ , 100λ³΄λ€ μλ€)
75 -> μλ€. (50λ³΄λ€ ν¬κ³ , 75λ³΄λ€ μλ€)
62 -> ν¬λ€. (62λ³΄λ€ ν¬κ³ , 75λ³΄λ€ μλ€)
68 -> ν¬λ€. (68λ³΄λ€ ν¬κ³ , 75λ³΄λ€ μλ€)
71 -> μλ€. (68λ³΄λ€ ν¬κ³ , 71λ³΄λ€ μλ€)
69 -> ν¬λ€. (69λ³΄λ€ ν¬κ³ , 71λ³΄λ€ μλ€) -> 70
μ κ΅ μ¬μ¬ λ¬Έμ λ μ΄μ κ°μ΄ μ΄λΆ νμμ μ΄μ©νμ¬ μ§§μ μ½λλ‘ ν΄κ²°ν μ μμλ€.
π μ½λ
public class μ
κ΅μ¬μ¬ {
@Test
void test() {
long solution = solution(6, new int[]{7, 10});
assertThat(solution).isEqualTo(28);
}
public long solution(int n, int[] times) {
long min = 1L;
long max = 1_000_000_000L * 100_001L;
while (min <= max) {
long mid = (min + max) / 2;
if (isBig(mid, times, n)) max = mid - 1L;
else min = mid + 1L;
}
return min;
}
private boolean isBig(long totalTime, int[] times, int n) {
long count = 0L;
for (int time : times) {
count += (totalTime / time);
}
return count >= n;
}
}
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
'Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
π 2019 μΉ΄μΉ΄μ€ λΈλΌμΈλ 곡μ±: νλ³΄ν€ (Java) (0) | 2020.05.03 |
---|---|
π€ 2020 μΉ΄μΉ΄μ€ λΈλΌμΈλ 곡μ±: μλ¬Όμ μ μ΄μ (Java) (0) | 2020.04.28 |
π νλ‘κ·Έλλ¨Έμ€: Lv3. μ κ΅ μ¬μ¬ (Java) (0) | 2020.04.25 |
π μΉ΄μΉ΄μ€ 2019 κ²¨μΈ μΈν΄μ: λΆλ μ¬μ©μ(Lv3) (0) | 2020.04.05 |
π μΉ΄μΉ΄μ€ 2019 κ²¨μΈ μΈν΄μ: ν¬λ μΈ μΈνλ½κΈ° κ²μ(Lv2) (0) | 2020.04.01 |
π¨ μΉ΄μΉ΄μ€ 2019 κ²¨μΈ μΈν΄μ: νΈν λ°© λ°°μ (Lv4) (0) | 2020.04.01 |