[ νλ‘κ·Έλλ¨Έμ€ / Programmers Level 3 ] μ§κ²λ€λ¦¬ 건λκΈ° ( JAVA / μλ° )
https://programmers.co.kr/learn/courses/30/lessons/64062
μ½λ©ν μ€νΈ μ°μ΅ - μ§κ²λ€λ¦¬ 건λκΈ°
[2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3
programmers.co.kr
λ¬Έμ
[λ³Έ λ¬Έμ λ μ νμ±κ³Ό ν¨μ¨μ± ν μ€νΈ κ°κ° μ μκ° μλ λ¬Έμ μ λλ€.]
μΉ΄μΉ΄μ€ μ΄λ±νκ΅μ "λλμ¦ μΉκ΅¬λ€"μ΄ "λΌμ΄μΈ" μ μλκ³Ό ν¨κ» κ°μ μνμ κ°λ μ€μ μ§κ²λ€λ¦¬κ° μλ κ°μΈμ λ§λμ 건λνΈμΌλ‘ 건λλ €κ³ ν©λλ€. "λΌμ΄μΈ" μ μλμ "λλμ¦ μΉκ΅¬λ€"μ΄ λ¬΄μ¬ν μ§κ²λ€λ¦¬λ₯Ό 건λ μ μλλ‘ λ€μκ³Ό κ°μ΄ κ·μΉμ λ§λ€μμ΅λλ€.
- μ§κ²λ€λ¦¬λ μΌλ ¬λ‘ λμ¬ μκ³ κ° μ§κ²λ€λ¦¬μ λλ€λμλ λͺ¨λ μ«μκ° μ ν μμΌλ©° λλ€λμ μ«μλ ν λ² λ°μ λλ§λ€ 1μ© μ€μ΄λλλ€.
- λλ€λμ μ«μκ° 0μ΄ λλ©΄ λ μ΄μ λ°μ μ μμΌλ©° μ΄λλ κ·Έ λ€μ λλ€λλ‘ νλ²μ μ¬λ¬ μΉΈμ 건λ λΈ μ μμ΅λλ€.
- λ¨, λ€μμΌλ‘ λ°μ μ μλ λλ€λμ΄ μ¬λ¬ κ°μΈ κ²½μ° λ¬΄μ‘°κ±΄ κ°μ₯ κ°κΉμ΄ λλ€λλ‘λ§ κ±΄λλΈ μ μμ΅λλ€.
"λλμ¦ μΉκ΅¬λ€"μ κ°μΈμ μΌμͺ½μ μμΌλ©°, κ°μΈμ μ€λ₯Έμͺ½ 건λνΈμ λμ°©ν΄μΌ μ§κ²λ€λ¦¬λ₯Ό 건λ κ²μΌλ‘ μΈμ ν©λλ€.
"λλμ¦ μΉκ΅¬λ€"μ ν λ²μ ν λͺ
μ© μ§κ²λ€λ¦¬λ₯Ό 건λμΌ νλ©°, ν μΉκ΅¬κ° μ§κ²λ€λ¦¬λ₯Ό λͺ¨λ 건λ νμ κ·Έ λ€μ μΉκ΅¬κ° 건λκΈ° μμν©λλ€.
λλ€λμ μ ν μ«μκ° μμλλ‘ λ΄κΈ΄ λ°°μ΄ stonesμ ν λ²μ 건λλΈ μ μλ λλ€λμ μ΅λ μΉΈμ kκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μ΅λ λͺ λͺ κΉμ§ μ§κ²λ€λ¦¬λ₯Ό 건λ μ μλμ§ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ ν μ¬ν
- μ§κ²λ€λ¦¬λ₯Ό 건λμΌ νλ λλμ¦ μΉκ΅¬λ€μ μλ 무μ ν μ΄λΌκ³ κ°μ£Όν©λλ€.
- stones λ°°μ΄μ ν¬κΈ°λ 1 μ΄μ 200,000 μ΄νμ λλ€.
- stones λ°°μ΄ κ° μμλ€μ κ°μ 1 μ΄μ 200,000,000 μ΄νμΈ μμ°μμ λλ€.
- kλ 1 μ΄μ stonesμ κΈΈμ΄ μ΄νμΈ μμ°μμ λλ€.
νμ΄
ν¨μ¨μ± 체ν¬κ° μκΈ° λλ¬Έμ μ΄λΆνμ
μΌλ‘ ν΄κ²° βΌοΈ
οΉ‘min : 건λλ μΉκ΅¬μ μ΅μμ μ
οΉ‘max : 건λλ μΉκ΅¬μ μ΅λμ μ
canCrossStone() : νμ¬μ μΉκ΅¬μ μκ° kμΉΈμ λ―Έλ§μΌλ‘ 건λ μ μλ μ§ νμΈ
μ½λ
public class μ§κ²λ€λ¦¬κ±΄λκΈ° {
public static int solution(int[] stones, int k) {
int answer = 0;
int min = 1;
int max = 200000000;
while(min <= max){
int mid = (min+max)/2;
if(canCrossStone(stones, k, mid)){
min = mid + 1;
answer = Math.max(answer, mid);
}
else
max = mid - 1;
}
return answer;
}
private static boolean canCrossStone(int[] stones, int k, int mid) {
int skip = 0;
for(int s : stones){
if(s - mid < 0)
skip++;
else
skip = 0;
if(skip == k)
return false;
}
return true;
}
public static void main(String[] args) {
int[] stones = {2, 4, 5, 3, 2, 1, 4, 2, 5, 1};
System.out.println(solution(stones, 3));
}
}