π νλ‘κ·Έλλ¨Έμ€ / Level2 / νΈν λμ€
π λ¬Έμ
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
π« μ ν μ¬ν
- 1 ≤ book_timeμ κΈΈμ΄ ≤ 1,000
- book_time[i]λ ["HH:MM", "HH:MM"]μ ννλ‘ μ΄λ£¨μ΄μ§ λ°°μ΄μ
λλ€
- [λμ€ μμ μκ°, λμ€ μ’ λ£ μκ°] ννμ λλ€.
- μκ°μ HH:MM ννλ‘ 24μκ° νκΈ°λ²μ λ°λ₯΄λ©°, "00:00" λΆν° "23:59" κΉμ§λ‘ μ£Όμ΄μ§λλ€.
- μμ½ μκ°μ΄ μμ μ λμ΄κ°λ κ²½μ°λ μμ΅λλ€.
- μμ μκ°μ νμ μ’ λ£ μκ°λ³΄λ€ λΉ λ¦ λλ€.
- book_time[i]λ ["HH:MM", "HH:MM"]μ ννλ‘ μ΄λ£¨μ΄μ§ λ°°μ΄μ
λλ€
π μ μΆλ ₯ μ

π€ νμ΄ λ°©λ²
1οΈβ£ μμ΄λμ΄
β‘οΈ λμ€ μμ μκ°μ κΈ°μ€μΌλ‘ μμ½ κ±΄λ€μ μ λ ¬ν ν μμ½μ νλμ© νμΈνλ©° λΉμμ§ λ£Έμ΄ μμΌλ©΄ λ€μ΄κ°κ³ μμΌλ©΄ λ£Έμ μΆκ°νμ¬ λ€μ΄κ°λ κ³Όμ μ λ°λ³΅νλ€.
2οΈβ£ νμν μλ£κ΅¬μ‘°
β Room Class
β‘οΈ μμ½ κ±΄λ€μ μμ μκ°κ³Ό μ’ λ£ μκ°μ μ 리ν Room Class λ₯Ό μμ±νμλ€. μ΄λ μκ°&λΆμΌλ‘ κ΅³μ΄ λλμ§ μκ³ λΆννλ‘ λ³ννμ¬ μ μ₯νμκ³ , λμ€ μ’ λ£ ν 10λΆμ μ 리μκ°μ΄ μλ μ μ κ³ λ €νμ¬ μ’ λ£ μκ° μ체μ 10λΆμ λνμλ€. λν μΆν μ°μ μμ νμ λ΄μ λ μ λ ¬ κΈ°μ€μ μ 곡νκΈ° μν΄ μμμκ°μ κΈ°μ€μΌλ‘νλ Comparable μΈν°νμ΄μ€λ₯Ό ꡬννμλ€.
// Room ν΄λμ€ μ μΈ
class Room implements Comparable<Room> {
int startTime;
int endTime;
public Room (int sh, int sm, int eh, int em) {
this.startTime = sh*60 + sm;
this.endTime = eh*60 + em + 10; // λ¨Όμ μ²μμκ° 10λΆμ λνλ€.
}
@Override
public int compareTo (Room other) {
return Integer.compare(this.startTime, other.startTime);
}
}
β‘ Priority Queue (μ°μ μμ ν)
β‘οΈ Room ν΄λμ€λ₯Ό λ΄λ μ°μ μμ νλ₯Ό μμ±νμλ€.
// μ°μ μμ ν μμ±
Queue<Room> pq = new PriorityQueue<>();
β’ ArrayList (리μ€νΈ)
β‘οΈ λ£Έμ κ°μλ₯Ό νμΈνκΈ° μν λ°°μ΄μ μμ±νμλ€.
// 리μ€νΈ μ μΈ
ArrayList<Room> roomList = new ArrayList<>();
π» νμ΄ μ½λ
import java.util.Queue;
import java.util.PriorityQueue;
import java.util.ArrayList;
// Room ν΄λμ€ μ μΈ
class Room implements Comparable<Room> {
int startTime;
int endTime;
public Room (int sh, int sm, int eh, int em) {
this.startTime = sh*60 + sm;
this.endTime = eh*60 + em + 10; // λ¨Όμ μ²μμκ° 10λΆμ λνλ€.
}
@Override
public int compareTo (Room other) {
return Integer.compare(this.startTime, other.startTime);
}
}
class Solution {
public static ArrayList<Room> roomList;
public int solution(String[][] book_time) {
int answer = 0;
int roomCnt = 0;
// μ
λ ₯κ° μ 리
String[] start, end;
Queue<Room> pq = new PriorityQueue<>();
for (String[] times : book_time) {
start = times[0].split(":");
end = times[1].split(":");
pq.add(new Room(Integer.parseInt(start[0]), Integer.parseInt(start[1]),
Integer.parseInt(end[0]), Integer.parseInt(end[1])));
}
// Queue λ€μ λ΄μ ArrayList μ μΈ & μ΄κΈ°κ° μ²λ¦¬
roomList = new ArrayList<>();
roomList.add(pq.poll());
System.out.println(roomList.size());
// Queue μ²λ¦¬
while(!pq.isEmpty()) {
Room room = pq.poll();
int[] roomInfo = minEndTime();
// κ²½μ° (1) : μλ‘μ΄ λ°©μ μμ μκ°μ΄ λλ¨Έμ§ λ°©λ€μ μ’
λ£μκ° λ³΄λ€ λ¦μ κ²½μ°
if (room.startTime < roomInfo[0]) {
// λ°©μ μΆκ°νμ¬ λ£μ
roomList.add(room);
// System.out.println(roomList.size());
}
// κ²½μ° (2) : μλ‘μ΄ λ°©μ μμ μκ°μ΄ λλ¨Έμ§ λ°©λ€μ΄ μ’
λ£μκ° λ³΄λ€ λΉ λ₯Έ κ²½μ°
else {
// μ΅μ μ’
λ£ μκ° λ°©μ ν΄λΉ λ°©μ λ£λλ€.
roomList.set(roomInfo[1], room);
}
}
// μ΄ μμμ κ°μ = νμν λ°©μ κ°μ
return roomList.size();
}
public int[] minEndTime () {
int[] info = {Integer.MAX_VALUE, 0};
for (int i=0; i<roomList.size(); i++) {
if (roomList.get(i).endTime < info[0]) {
info[0] = roomList.get(i).endTime;
info[1] = i;
}
}
return info;
}
}

π§ μΆκ°κ³΅λΆ
'Algorithm π€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| (μκ³ λ¦¬μ¦ μ€ν°λ) (Programmers) μ¬ μ°κ²°νκΈ° ποΈ (0) | 2023.07.20 |
|---|---|
| (μκ³ λ¦¬μ¦ μ€ν°λ) (Programmers) νλ Έμ΄μ ν π° (0) | 2023.05.23 |
| μ΄λΆ νμ π (Binary Search) (0) | 2023.04.17 |
| κ·Έλνπ (Graph) (0) | 2023.03.21 |
| λμ κ³νλ²ποΈ (Dynamic Programming) (0) | 2023.03.13 |