티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/72414
코딩테스트 연습 - 광고 삽입
시간을 나타내는 HH, H1, H2의 범위는 00~99, 분을 나타내는 MM, M1, M2의 범위는 00~59, 초를 나타내는 SS, S1, S2의 범위는 00~59까지 사용됩니다. 잘못된 시각은 입력으로 주어지지 않습니다. (예: 04:60:24, 11
programmers.co.kr
- 10초짜리 동영상을 0초부터 봤다는 것은 10초에 동영상 끝난 것이다. 따라서 0초부터 9초 까지만 시청자 누적 수를 더해주어야 한다.
- 누적 합이 정수 범위를 넘어갈 수 있어
long
으로 선언해야 한다. - 큐로 투포인터를 실행한다.
코드 참조 : https://yjyoon-dev.github.io/kakao/2021/01/29/kakao-insertad/
import java.util.*;
// 210515
class Solution_LV3_광고삽입 {
// 문자열 시간 -> 초
static int strToSec(String time) {
String[] arr = time.split(":");
int sec = stoi(arr[0])*60*60 + stoi(arr[1])*60 + stoi(arr[2]);
return sec;
}
// 초 -> 문자열 시간
static String secToStr(int sec) {
String str="";
int m = sec/60; int s = sec%60;
int h = m/60; m = m%60;
if(h<10) str += ("0" + h + ":");
else str+= (h + ":");
if(m<10) str += ("0" + m + ":");
else str+= (m + ":");
if(s<10) str += ("0" + s);
else str+= s;
return str;
}
public String solution(String play_time, String adv_time, String[] logs) {
int[] watchers = new int[100*60*60];
// 1. 누적 시청자 수
for(String log: logs) {
String[] t = log.split("-");
int startTime = strToSec(t[0]);
int endTime = strToSec(t[1]);
for(int s=startTime; s<endTime; s++) {
++watchers[s];
}
}
// 전체 동영상 재생 시간 (초)
int totalLen = strToSec(play_time);
// 광고 동영생 재생 시간 (초)
int adLen = strToSec(adv_time);
Queue<Integer> q = new ArrayDeque<Integer>();
long sum = 0; // 현재 구간 합 (누적 시청자 수)
long maxSum = 0; // 최대 구간 합 (누적 시청자 수)
// 2. 0초~adLen초 까지의 구간합
for(int i=0; i<adLen; i++) {
sum += watchers[i];
q.offer(watchers[i]);
}
maxSum = sum;
int idx = 0;
for(int i=adLen; i<totalLen; i++) {
// i초 구간에서의 시청자 수
sum += watchers[i];
q.offer(watchers[i]);
// 큐의 맨 앞 시청자 수 - 구간 제외
sum -= q.poll();
if(sum > maxSum) {
maxSum = sum;
idx = i-adLen+1;
}
}
return secToStr(idx);
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Programmers] LV2. 빛의 경로 사이클 (0) | 2021.09.15 |
---|---|
[Programmers] LV2. 단체사진 찍기 (0) | 2021.06.20 |
[Programmers] LV3. 합승 택시 요금 (0) | 2021.05.14 |
[Programmers] LV2. 순위 검색 (0) | 2021.05.13 |
[Programmers] LV3. 보석쇼핑 (0) | 2021.05.06 |
댓글