[프로그래머스] 광고 삽입

uni.gy·2023년 11월 23일
0

알고리즘

목록 보기
22/61

문제

풀이

  • 타임라인을 초로 변환해준다.
  • 모든 log를 조회하여 각 초마다 재생시간을 누적시켜준다.
  • 광고 시간만큼 슬라이딩 윈도우를 통해 누적합이 가장 큰 구간을 구해준다.

코드

class Solution {
        public String solution(String play_time, String adv_time, String[] logs) {
            String answer = "00:00:00";
            int[] times = new int[100 * 60 * 60];
            if (play_time.equals(adv_time)) return answer;
            for (String log : logs) {
                String[] split = log.split("-");
                int start = strToInt(split[0]);
                int end = strToInt(split[1]);
                for (int i = start; i < end; i++) times[i]++;
            }
            int adTime = strToInt(adv_time);
            int playTime = strToInt(play_time);
            long longestTime = 0;
            long sum = 0;
            int maxIdx = 0;
            for (int i = 1; i <= playTime - adTime; i++) {
                sum += times[i + adTime - 1] - times[i - 1];
                if (sum > longestTime) {
                    longestTime = sum;
                    maxIdx = i;
                }
            }
            answer = intToStr(maxIdx);
            return answer;
        }

        public static int strToInt(String str) {
            StringTokenizer st = new StringTokenizer(str, ":");
            int ret = 0;
            ret += Integer.parseInt(st.nextToken()) * 60 * 60;
            ret += Integer.parseInt(st.nextToken()) * 60;
            ret += Integer.parseInt(st.nextToken());
            return ret;
        }

        public static String intToStr(int time) {
            StringBuilder sb = new StringBuilder();
            int h = time / 3600;
            sb.append(h < 10 ? "0" + h : h);
            time %= 3600;
            sb.append(":");
            int m = time / 60;
            sb.append(m < 10 ? "0" + m : m);
            time %= 60;
            sb.append(":");
            sb.append(time < 10 ? "0" + time : time);
            return sb.toString();
        }
    }
}

#슬라이딩 윈도우

profile
한결같이

0개의 댓글