반응형
문제분석
timetable로 주어진 시간을 전부다 숫자로 변환한다.
그 후, 한번 대기열순대로 정렬한다.
버스는 n 개 손님은 m명 배차간격은 t분이다.
9시부터 시작하여 버스 도착시간까지 대기열이 있다면 입장을시켜 출발시킨다.
여기서 문제는 어떻게든 늦게출근하고싶은 주인공을 반환해줘야한다.
어떻게든 늦게출근하고싶으니, 막차시간을 유의하며 보면된다.
막차+ 자리가 남을땐, 막차시간에 탑승을하면된다.
막차 + 자리가 없을땐, 대기열을 유리하게 가져가야하므로, 버스에 마지막에타는사람보다 1분일찍오면된다.
문제풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
import java.util.*;
class Solution {
public String solution(int n, int t, int m, String[] timetable) {
String answer = "";
// 9시에 공간이 m 만큼 ,->n개만큼과 t분배치
List<Integer> list = new ArrayList<>();
for(int i=0;i<timetable.length;i++){
list.add(StringToInt(timetable[i]));
}
Collections.sort(list);
int current = 540;
int idx=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(idx!=list.size()&&list.get(idx)<=current){
idx++;
}else{
//마지막 버스 + 좌석이 남을때
if(i==n-1){
return (IntToString(current));
}
}
}
current+=t;
}
//마지막 버스 + 좌석이 모두꽉찼을때
return IntToString(list.get(idx-1)-1);
}
public int StringToInt(String timetable){
String[] time = timetable.split(":");
int sum=0;
sum+=60*Integer.parseInt(time[0])+Integer.parseInt(time[1]);
return sum;
}
public String IntToString(int time){
String rest =time/60+":";
if(time/60<10){
rest="0"+rest;
}
if(time%60<10){
rest+="0"+time%60;
}else{
rest+=time%60;
}
return rest;
}
}
|
cs |
반응형
'알고리즘 > 프로그래머스 Level3' 카테고리의 다른 글
[프로그래머스,Java] Level3: 연속 펄스 부분 수열의 합 (1) | 2023.03.05 |
---|---|
[프로그래머스 ,Java] Level3: 스티커 모으기 (0) | 2023.02.26 |
[프로그래머스, Java] Level3 : 파괴되지않는 건물 (0) | 2023.01.30 |
[프로그래머스,Java] Level3: 표현 가능한 이진트리 (1) | 2023.01.24 |
[프로그래머스,Java] Level3: 인사고과 (0) | 2023.01.24 |