광고 삽입

LJM·2023년 8월 15일
0

programmers

목록 보기
59/92

https://school.programmers.co.kr/learn/courses/30/lessons/72414

문제가 어려우다~~... 찾아보고 풀었다..

모든 시간을 초단위로 변경한다
전체재생시간배열 만들고
시청자의 시작시간 인덱스 ++
마치는 시간 --
전제재생시간배열 순회하면서 누적하면 초단위로 시청자수가 나온다

슬라이딩 윈도우의 왼쪽은 0 이고 오른쪽은 공익광고 시간 세팅하고 하나씩 증가하면서
공익광고 시간안에 시청자수 최대를 찾는다

import java.util.*;

class Solution {
    public String solution(String play_time, String adv_time, String[] logs) {
        int totaltime = toSecond(play_time);
        int advsecond = toSecond(adv_time);
        
        int[] viewcnt = new int[totaltime + 1];
        
        for (String log : logs) {
            String[] times = log.split("-");
            int start = toSecond(times[0]);
            int end = toSecond(times[1]);
            
            viewcnt[start]++;
            viewcnt[end]--;
        }
        
        for (int i = 1; i <= totaltime; i++) {
            viewcnt[i] += viewcnt[i - 1];
        }
        
        long currentSum = 0;
        for (int i = 0; i < advsecond; i++) {
            currentSum += viewcnt[i];
        }
        
        long maxSum = currentSum;
        int maxTime = 0;
        
        for (int start = 0; start + advsecond < totaltime; start++) {
            currentSum = currentSum - viewcnt[start] + viewcnt[start + advsecond];
            if (currentSum > maxSum) {
                maxSum = currentSum;
                maxTime = start + 1;
            }
        }
        
        return toTimeString(maxTime);
    }
    
    public int toSecond(String time) {
        String[] parts = time.split(":");
        int h = Integer.parseInt(parts[0]);
        int m = Integer.parseInt(parts[1]);
        int s = Integer.parseInt(parts[2]);
        return h * 3600 + m * 60 + s;
    }
    
    public String toTimeString(int seconds) {
        int h = seconds / 3600;
        int m = (seconds % 3600) / 60;
        int s = seconds % 60;
        return String.format("%02d:%02d:%02d", h, m, s);
    }
}
profile
게임개발자 백엔드개발자

1개의 댓글

comment-user-thumbnail
2023년 8월 15일

감사합니다. 이런 정보를 나눠주셔서 좋아요.

답글 달기