-
[Algo RhythmπΊπ] νλ‘κ·Έλλ¨Έμ€ κ³ λμ kit μμ°Algo RhythmπΊπ/Programmers 2020. 7. 30. 15:38
π λ¬Έμ μ€λͺ
κ΅κ°μ μν μ€ νλλ μ¬λ¬ μ§λ°©μ μμ°μμ²μ μ¬μ¬νμ¬ κ΅κ°μ μμ°μ λΆλ°°νλ κ²μ λλ€. κ΅κ°μμ°μ μ΄μ‘μ 미리 μ ν΄μ Έ μμ΄μ λͺ¨λ μμ°μμ²μ λ°°μ ν΄ μ£ΌκΈ°λ μ΄λ €μΈ μλ μμ΅λλ€. κ·Έλμ μ ν΄μ§ μ΄μ‘ μ΄νμμ κ°λ₯ν ν μ΅λμ μ΄ μμ°μ λ€μκ³Ό κ°μ λ°©λ²μΌλ‘ λ°°μ ν©λλ€.
1. λͺ¨λ μμ²μ΄ λ°°μ λ μ μλ κ²½μ°μλ μμ²ν κΈμ‘μ κ·Έλλ‘ λ°°μ ν©λλ€.
2. λͺ¨λ μμ²μ΄ λ°°μ λ μ μλ κ²½μ°μλ νΉμ ν μ μ μνμ‘μ κ³μ°νμ¬ κ·Έ μ΄μμΈ μμ°μμ²μλ λͺ¨λ μνμ‘μ λ°°μ ν©λλ€. μνμ‘ μ΄νμ μμ°μμ²μ λν΄μλ μμ²ν κΈμ‘μ κ·Έλλ‘ λ°°μ ν©λλ€.μλ₯Ό λ€μ΄, μ 체 κ΅κ°μμ°μ΄ 485μ΄κ³ 4κ° μ§λ°©μ μμ°μμ²μ΄ κ°κ° 120, 110, 140, 150μΌ λ, μνμ‘μ 127λ‘ μ‘μΌλ©΄ μμ μμ²λ€μ λν΄μ κ°κ° 120, 110, 127, 127μ λ°°μ νκ³ κ·Έ ν©μ΄ 484λ‘ κ°λ₯ν μ΅λκ° λ©λλ€.
κ° μ§λ°©μμ μμ²νλ μμ°μ΄ λ΄κΈ΄ λ°°μ΄ budgetsκ³Ό μ΄ μμ° Mμ΄ λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μμ 쑰건μ λͺ¨λ λ§μ‘±νλ μνμ‘μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ ν μ¬ν
-
μ§λ°©μ μλ 3 μ΄μ 100,000 μ΄νμΈ μμ°μμ λλ€.
-
κ° μ§λ°©μμ μμ²νλ μμ°μ 1 μ΄μ 100,000 μ΄νμΈ μμ°μμ λλ€.
-
μ΄ μμ°μ μ§λ°©μ μ μ΄μ 1,000,000,000 μ΄νμΈ μμ°μμ λλ€.
π― μ΄λ»κ² νμλ
첫λ²μ§Έ μλ (70/ 100)
import java.util.Arrays; class Solution { public int solution(int[] budgets, int M) { int answer = 0; int n = budgets.length; int max = Arrays.stream(budgets).max().getAsInt(); int min = Arrays.stream(budgets).min().getAsInt(); int lower = M / n, upper = max; int rem = M % n; if(Arrays.stream(budgets).sum() <= M) { answer = max; } else { while(lower < upper) { int mid = (lower + upper) / 2; int total = getTotal(budgets, mid); // System.out.println("Lower : " + lower); // System.out.println("Upper : " + upper); // System.out.println("mid : " + mid); // System.out.println("total : " + total); // System.out.println("M - total : " + (M - total)); // System.out.println(); if(M - total == rem) { answer = mid; break; } if(M - total > rem) { lower = mid + 1; continue; } if(M - total < rem) { upper = mid; continue; } } } return answer; } public int getTotal(int[] budgets, int limit) { int total = 0; for(int i = 0; i < budgets.length; i++) { total += (budgets[i] > limit) ? limit : budgets[i]; } return total; } }
λλ²μ§Έ μλ (95/ 100)
import java.util.Arrays; class Solution { public int solution(int[] budgets, int M) { int answer = 0; int n = budgets.length; int max = Arrays.stream(budgets).max().getAsInt(); int lower = M / n, upper = max; if(Arrays.stream(budgets).sum() <= M) { answer = max; } else { while(lower <= upper) { int mid = lower + (upper - lower) / 2; int total = getTotal(budgets, mid); // System.out.println("Lower : " + lower); // System.out.println("Upper : " + upper); // System.out.println("mid : " + mid); // System.out.println("total : " + total); // System.out.println("M - total : " + (M - total)); // System.out.println(); if(M - total > 0) { // λλ € answer = (answer < mid) ? mid : answer; lower = mid + 1; continue; } if(M - total < 0) { // μ€μ¬ upper = mid - 1; continue; } } } return answer; } public int getTotal(int[] budgets, int limit) { int total = 0; for(int i = 0; i < budgets.length; i++) { total += (budgets[i] > limit) ? limit : budgets[i]; } return total; } }
μ΅μ’ μ½λ
class Solution { public int solution(int[] budgets, int M) { int answer = 0; int n = budgets.length; long sum = 0; int max = Integer.MIN_VALUE; for(int i = 0; i < n; i++) { max = (max > budgets[i]) ? max : budgets[i]; sum += budgets[i]; } int lower = M / n, upper = max; if(sum <= M) { answer = max; } else { while(lower <= upper) { int mid = lower + (upper - lower) / 2; if(isCapable(budgets, mid, M)) { answer = (answer < mid) ? mid : answer; // μνκ° = κ°λ₯ν μμ° μ€ μ΅λ lower = mid + 1; continue; } else { upper = mid - 1; continue; } } } return answer; } public boolean isCapable(int[] budgets, int limit, int M) { long total = 0; for(int i = 0; i < budgets.length; i++) { total += (budgets[i] > limit) ? limit : budgets[i]; } return (M > total); } }
π§ μ μ λ κ² νμλ
첫λ²μ§Έ μλ (70/ 100)
μ²μμλ μμ κ°μ΄ λͺ¨λ μμ²μ΄ λ°°μ λ μ μλ κ²½μ°μλ κ° μ§λ°©μ μμ° μμ²μ‘ μ€ κ°μ₯ ν° μ‘μλ₯Ό μνκ°λ‘ νκ³
λͺ¨λ μμ²μ΄ λ°°μ λ μ μλ κ²½μ°μλ μ΄ μμ°μμ μνκ°μ λ°λΌ κ²°μ λλ κ° μ§λ°© μμ°λ€μ μ΄ν©μ λΊ κ°κ³Ό μ΄ μμ°μ μ§λ°©μ μλ‘ λλ λλ¨Έμ§κ° κ°μμΌ νλ€κ³ μκ°νλ€. (νΉλ³ν μ΄μ λ μμλ€. κ·Έλ₯ μ΄λ€ μ¨κ²¨μ§ λ²μΉμ λ°κ²¬ν μ€ μμλ€.π€£)
κ·Έλ¦¬κ³ μκ°ν΄λ³΄λ λͺ¨λ μμ²μ΄ λ°°μ λ μ μλ κ²½μ°μ μνκ°μ μ΅μκ°μ μ΄ μμ°μ κ° μ§λ°©μ λ°λΌ κ· λ±νκ² λλ κ°μ΄λΌλ κ²μ μ μ μμ΄μ μνκ°μ μ΅μκ°μ M / n, μ΅λκ°μ maxλ‘ λκ³ binary searchλ₯Ό ν΅ν΄ μ°Ύμκ°λλ‘ νλ€.
λλ²μ§Έ μλ (95/ 100)
μκ°ν΄λ³΄λ μ΄ μμ°μ΄ μνκ°μ λ°λΌ κ²°μ λλ κ° μ§λ°© μμ°λ€μ μ΄ν©λ³΄λ€ ν° κ²½μ° μ¦, λ°°μ κ°λ₯ν κ²½μ°μ μνκ°λ κ°λ₯ν μμ° μ€ μ΅λκ°μ΄λ©΄ λλ€λ κ²μ μ μ μμλ€. νμ§λ§ ν¨μ¨μ±μ΄ λ¬Έμ μλ€.
μ΅μ’ μ½λ
μκ³ λ¦¬μ¦ μ체λ λ¬Έμ κ° μμ΄μ λ΅λ΅νλ€. κ·Έλμ μ§λ¬ΈνκΈ°λ₯Ό 보λ λ¬Έμ λ μνκ°μ λ°λΌ λ°°μ λλ κ° μ§λ°©μ μμ° μ΄ν©μ intλ‘ νννλ©΄ overflowκ° λ°μν΄μ κ·Έλ λ€λ κ²μ μκ² λμλ€. LongμΌλ‘ μμ νλ ν΄κ²°ν μ μμλ€.
π 무μμ λ°°μ λ
νμ€νμ§ μμΌλ©΄ μ’ λ μκ°νλ μ΅κ΄μ κ°μ§μ!
'Algo RhythmπΊπ > Programmers' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
-