Skip to content

Commit 554ab04

Browse files
authored
Create 프로그래머스_과제진행하기.java
1 parent 1ed54ba commit 554ab04

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import java.util.*;
2+
class Solution {
3+
4+
class Node {
5+
String name;
6+
int time;
7+
int playtime;
8+
public Node(String name, int time, int playtime) {
9+
this.name = name;
10+
this.time = time;
11+
this.playtime = playtime;
12+
}
13+
}
14+
15+
public String[] solution(String[][] plans) {
16+
String[] answer = new String[plans.length];
17+
PriorityQueue<Node> pq = new PriorityQueue<>((a,b) -> a.time - b.time);
18+
Stack<Node> stack = new Stack<>();
19+
for (String[] str : plans) {
20+
String[] s = str[1].split(":");
21+
int time = Integer.parseInt(s[0]) * 60 + Integer.parseInt(s[1]);
22+
int playtime = Integer.parseInt(str[2]);
23+
pq.offer(new Node(str[0],time,playtime));
24+
}
25+
26+
Node n = pq.poll();
27+
int now = n.time;
28+
int idx = 0;
29+
30+
31+
while(true) {
32+
if (!pq.isEmpty() && now + n.playtime > pq.peek().time) {
33+
stack.push(new Node(n.name, n.time,
34+
now + n.playtime - pq.peek().time));
35+
now = pq.peek().time;
36+
n = pq.poll();
37+
} else {
38+
answer[idx++] = n.name;
39+
now += n.playtime;
40+
if(!pq.isEmpty() && now == pq.peek().time) {
41+
n = pq.poll();
42+
} else if(!stack.isEmpty()) {
43+
n = stack.pop();
44+
} else if(!pq.isEmpty()) {
45+
n = pq.poll();
46+
now = n.time;
47+
} else {
48+
break;
49+
}
50+
}
51+
52+
}
53+
return answer;
54+
}
55+
}

0 commit comments

Comments
 (0)