https://school.programmers.co.kr/learn/courses/30/lessons/176962
๋ฌธ์
- ๊ณผ์ ๊ณํ์ ๋ด์ ์ด์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด plans๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ณผ์ ๋ฅผ ๋๋ธ ์์๋๋ก ์ด๋ฆ์ ๋ฐฐ์ด์ ๋ด์ return
- plans์ ์์๋ [name, start, playtime]์ ๊ตฌ์กฐ
- name : name์ด ์ค๋ณต๋๋ ์์๋ ์์
- start : "hh:mm"์ ํํ
- playtime : ๋จ์๋ ๋ถ
- ์๋ก์ด ๊ณผ์ ๋ฅผ ์์ํ ์๊ฐ์ด ๋์์ ๋, ์งํ ์ค์ด๋ ๊ณผ์ ๋ฅผ ๋ฉ์ถ๊ณ ์๋ก์ด ๊ณผ์ ๋ฅผ ์์
- ๊ณผ์ ๋ฅผ ๋๋์ ๋, ๋ฉ์ถฐ๋ ๊ณผ์ ๋ฅผ ์ด์ด์ ์งํ
- ๋ง์ฝ, ๊ณผ์ ๋ฅผ ๋๋ธ ์๊ฐ์ ์๋ก ์์ํด์ผ ๋๋ ๊ณผ์ ์ ์ ์ ๋ฉ์ถฐ๋ ๊ณผ์ ๊ฐ ๋ชจ๋ ์๋ค๋ฉด, ์๋ก ์์ํด์ผ ํ๋ ๊ณผ์ ๋ถํฐ ์งํ
- ๋ฉ์ถฐ๋ ๊ณผ์ ๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ, ๊ฐ์ฅ ์ต๊ทผ์ ๋ฉ์ถ ๊ณผ์ ๋ถํฐ ์์
์ ์ถ๋ ฅ ์์
- Plans : [["science", "12:40", "50"], ["music", "12:20", "40"], ["history", "14:00", "30"], ["computer", "12:30", "100"]]
- result : ["science", "history", "computer", "music"]
ํ์ด
- class (name, start, playtime) ๋ง๋ค์ด์ ๋ฆฌ์คํธ์ ์ ์ฅ
- start : ๊ณ์ฐํ๊ธฐ ์ฝ๊ฒ ํ์ฑํด์ ๋ถ(int)์ผ๋ก ๋ฐ๊พธ๊ธฐ
- ์์์์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ ์์
- ๊ฐ์ฅ ์ต๊ทผ์ ๋ฉ์ถ ๊ณผ์ ๋ถํฐ ์์ํด์ผ ํ๋ฏ๋ก ์งํ์ค ๊ณผ์ ๋ฅผ Stack์ ์ ์ฅ
- ์คํ์ ์งํํด์ผ ํ๋ ๊ณผ์ ๋ฃ๊ณ ์์
- ๋ค์ ๊ณผ์ ์์ ์ ๊น์ง ์คํ์์ ๊ณผ์ ๋นผ์ ๋ง์นจ
- ๊ณผ์ ์์ ์๊ฐ์ด ๋๋ฉด, ์คํ์ ๋ชป ๋ง์น ๊ณผ์ ์ playtime์ ๋จ์ ์๊ฐ์ผ๋ก ๊ฐฑ์ ํด์ ๋ฃ์ -> ๊ทธ๋ฆฌ๊ณ ์ค๋จ
- ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ์ ๋ ์์ํด์ผ ํ๋ ๊ณผ์ ๋ ๋๋จ
- ์คํ์ ๋จ์์๋ ์์ฌ ๊ณผ์ ๋ค์ ์ฐจ๋ก๋ก ์ํ
- ๊ฒฐ๊ณผ๋ List์ ์ ์ฅ ํ, return ์ ๋ฐฐ์ด๋ก ๋ณํ
์คํ ๋ถ๋ถ์์ ๋ฌธ์ ์์ ์ ํด์ง ๊ณผ์ ์ ๋ฐ๋ผ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ด๋ ค์ ๋ค.
์ฝ๋
import java.util.*;
class Solution {
public class Plan {
String name;
int start, playtime;
public Plan(String name, int start, int playtime) {
this.name = name;
this.start = start;
this.playtime = playtime;
}
public int getStart() {
return start;
}
}
public String[] solution(String[][] plans) {
List<Plan> planList = new ArrayList<>(); //Plan ํด๋์ค๋ก ๋ง๋ค์ด ๋ฆฌ์คํธ๋ก ์ ์ฅ
for(String[] plan : plans) {
planList.add(new Plan(plan[0], startToMin(plan[1]), Integer.parseInt(plan[2]) ));
}
//์์์์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ ์์
Collections.sort(planList, (p1, p2) -> p1.getStart() - p2.getStart());
Stack<Plan> stack = new Stack<>(); //๊ณผ์ ๋๊ธฐ์ด
List<String> result = new ArrayList<>(); //๊ฒฐ๊ณผ
for(int i = 0; i < planList.size(); i++) {
int now = planList.get(i).start;
int next = 0;
if(i != planList.size() - 1) {
next = planList.get(i + 1).start;
}
stack.add(planList.get(i));
while(!stack.isEmpty()) {
Plan p = stack.pop();
if(now + p.playtime <= next) {
now += p.playtime; //ํ์ฌ ์๊ฐ ๊ฐฑ์
result.add(p.name); //๊ณผ์ ๋ง์นจ
} else { //๊ณผ์ฌ ๋ชป๋ง์นจ
stack.add(new Plan(p.name, p.start, now + p.playtime - next)); //์ค๋จํ๊ณ ๊ณผ์ ๋๊ธฐ์ด
// now = next;
break;
}
}
}
//์ ์ ๋ฉ์ถ ๊ณผ์ ๋ชจ๋ ๋ค์ ์์
while (!stack.isEmpty()) {
result.add(stack.pop().name);
}
//List -> ๋ฐฐ์ด ๋ณํ
return result.toArray(new String[0]);
}
public int startToMin(String start) { //์์์๊ฐ์ ๋ถ์ผ๋ก ๋ณํ
String[] time = start.split(":");
return Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1]);
}
}
๊ฒฐ๊ณผ
๋ฐฐ์ด์
- ๊ฐ์ฒด ๋ฆฌ์คํธ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
Collections.sort(planList, (p1, p2) -> p1.getStart() - p2.getStart());
- List -> ๋ฐฐ์ด ๋ณํ
result.toArray(new String[0])
- ์คํ์ผ๋ก ์ ํด์ง ๊ณผ์ ์ ๊ตฌํํ๋ ๊ฒ์ด ์ด๋ ค์ ๋ค. ํนํ ์์ธ ์ํฉ ์์ด ๊ฐ๋จ ๋ช ๋ฃํ๊ฒ ๊ตฌํํ๋๋ก ํ๋ ๊ฒ์ด ํ๋ค์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ผ๋ฆฌ๊ฐ ์ ๋ง์ผ๋ฉด ์๊พธ isEmpty๋ popํ ๋ ์๋ฌ๊ฐ ๋๋ค.
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค - ๋ํ์ค ๊ฒ์ (0) | 2023.07.27 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค - ๋ฆฌ์ฝ์ณ ๋ก๋ด (0) | 2023.07.26 |
ํ๋ก๊ทธ๋๋จธ์ค - ๋ชจ์ ์ฌ์ (0) | 2023.07.25 |
ํ๋ก๊ทธ๋๋จธ์ค - ์๊ฒฉ ์์คํ (0) | 2023.07.17 |
ํ๋ก๊ทธ๋๋จธ์ค - ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ (0) | 2023.04.30 |