알고리즘
[Algorithm/Java] kakao 2021 광고 삽입
지수쓰
2021. 7. 31. 04:36
반응형
class Solution {
public int getTimesecondsByString(String time){
String[] hms = time.split(":");
int timeseconds = Integer.parseInt(hms[0])*3600
+ Integer.parseInt(hms[1])*60
+ Integer.parseInt(hms[2]);
return timeseconds;
}
public String getStringByTimeseconds(int time){
int h = time/3600;
int m = (time%3600) / 60;
int s = time%60;
String hour = h<10? "0"+h:String.valueOf(h);
String min = m==60? "00": m<10? "0"+m: String.valueOf(m);
String sec = s==60? "00": s<10? "0"+s: String.valueOf(s);
return hour+":"+min+":"+sec;
}
public String solution(String play_time, String adv_time, String[] logs) {
int time[]= new int[360001];
int playTimeSeconds = getTimesecondsByString(play_time);
int advTimeSeconds = getTimesecondsByString(adv_time);
for(String log : logs){
String[] logStamp = log.split("-");
int start = getTimesecondsByString(logStamp[0]);
int end = getTimesecondsByString(logStamp[1]);
for(int i=start; i<end; i++){
time[i]++;
}
}
int result = 0;
long max = 0;
long sum=0;
for(int i=0; i<advTimeSeconds; i++){
max+=time[i];
}
sum=max;
for(int i=advTimeSeconds; i<playTimeSeconds; i++){
sum-=time[i-advTimeSeconds];
sum+=time[i];
if(max<sum){
max=sum;
result=i-advTimeSeconds+1;
}
}
String answer = getStringByTimeseconds(result);
return answer;
}
}
이 문제는 코테때 복잡~~하게 건들다가 못풀던 기억이 났는데..
다시 풀어보려니까 생각이 안나서 결국 힌트를 봤더니 시간을 초로 변경해서 배열에 담고 슬라이딩 윈도우로 읽어내는 거였다!
알고나니 참 신기한..
다음에 시간 문제 나오면 이런 접근법을 생각해내봐야겠다.