νλ‘κ·Έλλ¨Έμ€ - νΈν λμ€
https://school.programmers.co.kr/learn/courses/30/lessons/155651
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
λ¬Έμ
- μ΅μνμ κ°μ€λ§μ μ¬μ©νμ¬ μμ½ μλλ€μ λ°μ.
- ν λ² μ¬μ©ν κ°μ€μ ν΄μ€ μκ°μ κΈ°μ€μΌλ‘ 10λΆκ° μ²μλ₯Ό νκ³ λ€μ μλλ€μ΄ μ¬μ©ν μ μμ.
- νμν μ΅μ κ°μ€μ μ ꡬνκΈ°
- 1 ≤ book_timeμ κΈΈμ΄ ≤ 1,000
- book_time[i]λ ["HH:MM", "HH:MM"]μ ννλ‘ μ΄λ£¨μ΄μ§ λ°°μ΄
μ μΆλ ₯ μμ
- μ λ ₯ : book_time [["15:00", "17:00"], ["16:40", "18:20"], ["14:20", "15:20"], ["14:10", "19:20"], ["18:20", "21:20"]]
- μΆλ ₯ : 3
νμ΄
그리λν λ°©λ²μΌλ‘ νμ΄μΌ νλ λ¬Έμ μ΄λ€. μμ μκ°μ΄ λΉ λ₯Έ κ²λΆν° μ°¨λ‘λ‘ λ°©μ λ£μ΄μΌ νλ€.
μ λ κ² μμ μκ°κ³Ό λλλ μκ°μ΄ μ£Όμ΄μ§κ³ μ΅λκ°μ΄λ μ΅μκ°μ ꡬνλ λ¬Έμ μ νμΌλ‘ νμμ€ λ¬Έμ κ° μ λͺ νλ€.
λ°±μ€ - νμμ€ λ°°μ (https://www.acmicpc.net/problem/1931)
νλ‘κ·Έλλ¨Έμ€ - μ격 μμ€ν (https://school.programmers.co.kr/learn/courses/30/lessons/181188)
'νΈν λμ€' λ¬Έμ λ νμμ€ λ¬Έμ μ νμ΄κ° λΉμ·νλ λ μκ°ν΄μΌ λ λΆλΆμ΄ μμλ€.
- String("HH:MM") ννμ κ°μ λΆ λ¨μ(int)λ‘ λ°κΎΈκΈ°
- timeToInt ν¨μ : ":"λ₯Ό κΈ°μ€μΌλ‘ μκ°κ³Ό λΆμ λλκ³ , λΆμΌλ‘ μ°μ°ν΄ 리ν΄
- μμ μκ°μ κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬νκΈ°
- μμ½μ μμ μκ°μ λ§μΆ° μ°¨λ‘λλ‘ λ°©μ λ°°μ ν κ²μ΄λ€.
- μ΅μν(μ°μ μμ ν) μ¬μ©
- μ΅μμ λ°©μ μ°λ €λ©΄, μλ‘μ΄ μμ½ μκ°μ λ°©μ λ°°μ ν λ μμ½μ΄ 빨리 λλλ λ°©μ μ°Ύμ λΉκ΅λ₯Ό ν΄μΌ νλ€. νμ λμ€ μ€μΈ μμ½λ€μ λ£κ³ , μ΅μνμΌλ‘ μ λ ¬μ ν΄ frontμ 빨리 λλλ μκ°μ΄ λμ€λλ‘ νλ€.
- μμ½μ΄ 빨리 λλλ λ°©μ μ’
λ£ μκ° + 10(μ²μμκ°)μ κΈ°μ€μΌλ‘ μλ‘μ΄ μμ½ μκ°μ΄
- λ€μ μλ€λ©΄, μλ‘ λ°©μ λ°°μ ν νμκ° μλ€. (μ΄μ μ μμ½μ λμ€ μ€μΈ νμμ μ κ±°ν΄μ€λ€.)
- μμ μλ€λ©΄, μκ°μ΄ κ²ΉμΉλ―λ‘ μλ‘ λ°©μ λ°°μ ν΄μΌ νλ€. (μ λ΅ μΉ΄μ΄νΈλ₯Ό λλ¦°λ€)
- λμ€ μ€μΈ νμ λ£λλ€.
μ½λ
import java.util.*;
class Solution {
public int solution(String[][] book_time) {
//λΆλ¨μλ‘ λ°κΎΈκΈ°
int[][] times = new int[book_time.length][2];
for(int i = 0; i < book_time.length; i++) {
for(int j = 0; j < 2; j++) {
times[i][j] = timeToInt(book_time[i][j]);
}
}
//μμ μκ° κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬
Arrays.sort(times, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o1[0] - o2[0]);
//λλλ μκ° + 10(μ²μμκ°) > λ€μ μμ μκ° -> μλ‘μ΄ λ°©
int answer = 1;
PriorityQueue<Integer> queue = new PriorityQueue<>(); //λμ€ μ€
queue.add(times[0][1]);
for(int i = 1; i < times.length; i++) {
if(queue.peek() + 10 > times[i][0]) {
answer++;
} else {
queue.remove();
}
queue.add(times[i][1]);
}
return answer;
}
public int timeToInt(String time) {
String[] str = time.split(":");
return 60 * Integer.parseInt(str[0]) + Integer.parseInt(str[1]);
}
}
κ²°κ³Ό
λ°°μ΄μ
- μ΅μ ν(μ°μ μμ ν) μ¬μ©