-
[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; } }
이 문제는 코테때 복잡~~하게 건들다가 못풀던 기억이 났는데..
다시 풀어보려니까 생각이 안나서 결국 힌트를 봤더니 시간을 초로 변경해서 배열에 담고 슬라이딩 윈도우로 읽어내는 거였다!
알고나니 참 신기한..
다음에 시간 문제 나오면 이런 접근법을 생각해내봐야겠다.'알고리즘' 카테고리의 다른 글
[Algorithm/Java] 백준 13334 철로 (0) 2022.01.12 [Algorithm/Java] dev matching : 다단계 칫솔 판매 (0) 2021.07.31 [자료구조] 링크드리스트 구현방식 (0) 2021.07.14 [Algorithm/Java] dev matching 로또의 최고순위와 최저순위 (0) 2021.07.14 [Algorithm/Java] kakao 2021 합승택시요금 (0) 2021.07.14