https://programmers.co.kr/learn/courses/30/lessons/72414
λ¬Έμ μ€λͺ
μΉ΄μΉ΄μ€TVμμ μ λͺ
ν ν¬λ¦¬μμ΄ν°λ‘ νλ μ€μΈ μ£ λ₯΄λλ νκ²½ λ¨μ²΄λ‘λΆν° μμ μ κ°μ₯ μΈκΈ°μλ λμμμ μ§κ΅¬μ¨λνμ μ¬κ°μ±μ μ리기 μν 곡μ΅κ΄κ³ λ₯Ό λ£μ΄ λ¬λΌλ μμ²μ λ°μμ΅λλ€. νμμ νκ²½ λ¬Έμ μ κ΄μ¬μ κ°μ§κ³ μλ "μ£ λ₯΄λ"λ μμ²μ λ°μλ€μκ³ κ΄κ³ ν¨κ³Όλ₯Ό λμ΄κΈ° μν΄ μμ²μλ€μ΄ κ°μ₯ λ§μ΄ 보λ ꡬκ°μ 곡μ΅κ΄κ³ λ₯Ό λ£μΌλ €κ³ ν©λλ€. "μ£ λ₯΄λ"λ μμ²μλ€μ΄ ν΄λΉ λμμμ μ΄λ€ ꡬκ°μ μ¬μνλ μ§ μ μ μλ μ¬μκ΅¬κ° κΈ°λ‘μ ꡬνκ³ , ν΄λΉ κΈ°λ‘μ λ°νμΌλ‘ 곡μ΅κ΄κ³ κ° μ½μ
λ μ΅μ μ μμΉλ₯Ό κ³ λ₯Ό μ μμμ΅λλ€.
μ°Έκ³ λ‘ κ΄κ³ λ μ¬μ μ€μΈ λμμμ μ€λ₯Έμͺ½ μλμμ μλ μμκ³Ό λμμ μ¬μλλ PIP(Picture in Picture) ννλ‘ μ 곡λ©λλ€.
λ€μμ "μ£ λ₯΄λ"κ° κ³΅μ΅κ΄κ³ κ° μ½μ λ μ΅μ μ μμΉλ₯Ό κ³ λ₯΄λ κ³Όμ μ κ·Έλ¦ΌμΌλ‘ μ€λͺ ν κ²μ λλ€.
- κ·Έλ¦Όμ νλμ μ μ κ΄κ³ λ₯Ό κ²ν μ€μΈ "μ£ λ₯΄λ" λμμμ μ 체 μ¬μ ꡬκ°μ λνλ
λλ€.
- μ κ·Έλ¦Όμμ, "μ£ λ₯΄λ" λμμμ μ΄ μ¬μμκ°μ 02μκ° 03λΆ 55μ΄ μ λλ€.
- κ·Έλ¦Όμ κ²μμ μ λ€μ κ° μμ²μλ€μ΄ "μ£ λ₯΄λ"μ λμμμ μ¬μν ꡬκ°μ μμΉλ₯Ό νμνκ³ μμ΅λλ€.
- κ²μμ μ μ κ°μ΄λ° μ«μλ κ° μ¬μ κΈ°λ‘μ ꡬλΆνλ IDλ₯Ό λνλ λλ€.
- κ²μμ μ μ νκΈ°λ μΌμͺ½ λ μ«μμ μ€λ₯Έμͺ½ λ μ«μλ μμ²μλ€μ΄ μ¬μν λμμ ꡬκ°μ μμ μκ°κ³Ό μ’ λ£ μκ°μ λνλ λλ€.
- μ κ·Έλ¦Όμμ, 3λ² μ¬μ κΈ°λ‘μ 00μ 25λΆ 50μ΄ λΆν° 00μ 48λΆ 29μ΄ κΉμ§ μ΄ 00μκ° 22λΆ 39μ΄ λμ μ£ λ₯΄λμ λμμμ μ¬μνμ΅λλ€. 1
- μ κ·Έλ¦Όμμ, 1λ² μ¬μ κΈ°λ‘μ 01μ 20λΆ 15μ΄ λΆν° 01μ 45λΆ 14μ΄ κΉμ§ μ΄ 00μκ° 24λΆ 59μ΄ λμ μ£ λ₯΄λμ λμμμ μ¬μνμ΅λλ€.
- κ·Έλ¦Όμ λΉ¨κ°μ μ μ "μ£ λ₯΄λ"κ° μ νν μ΅μ μ 곡μ΅κ΄κ³ μμΉλ₯Ό λνλ
λλ€.
- λ§μ½ 곡μ΅κ΄κ³ μ μ¬μμκ°μ΄ 00μκ° 14λΆ 15μ΄λΌλ©΄, μμ κ·Έλ¦Όμ²λΌ 01μ 30λΆ 59μ΄ λΆν° 01μ 45λΆ 14μ΄ κΉμ§ 곡μ΅κ΄κ³ λ₯Ό μ½μ νλ κ²μ΄ κ°μ₯ μ’μ΅λλ€. μ΄ κ΅¬κ°μ μμ²ν μμ²μλ€μ λμ μ¬μμκ°μ΄ κ°μ₯ ν¬κΈ° λλ¬Έμ λλ€.
- 01μ 30λΆ 59μ΄ λΆν° 01μ 45λΆ 14μ΄ κΉμ§μ λμ μ¬μμκ°μ λ€μκ³Ό κ°μ΄ κ³μ°λ©λλ€.
- 01μ 30λΆ 59μ΄ λΆν° 01μ 37λΆ 44μ΄ κΉμ§ : 4λ², 1λ² μ¬μ κΈ°λ‘μ΄ λμ°¨λ‘ μμΌλ―λ‘ μ¬μμκ°μ ν©μ 00μκ° 06λΆ 45μ΄ X 2 = 00μκ° 13λΆ 30μ΄
- 01μ 37λΆ 44μ΄ λΆν° 01μ 45λΆ 14μ΄ κΉμ§ : 4λ², 1λ², 5λ² μ¬μ κΈ°λ‘μ΄ μΈμ°¨λ‘ μμΌλ―λ‘ μ¬μμκ°μ ν©μ 00μκ° 07λΆ 30μ΄ X 3 = 00μκ° 22λΆ 30μ΄
- λ°λΌμ, μ΄ κ΅¬κ° μμ²μλ€μ λμ μ¬μμκ°μ 00μκ° 13λΆ 30μ΄ + 00μκ° 22λΆ 30μ΄ = 00μκ° 36λΆ 00μ΄μ λλ€.
[λ¬Έμ ]
"μ£ λ₯΄λ"μ λμμ μ¬μμκ° κΈΈμ΄ play_time, 곡μ΅κ΄κ³ μ μ¬μμκ° κΈΈμ΄ adv_time, μμ²μλ€μ΄ ν΄λΉ λμμμ μ¬μνλ κ΅¬κ° μ 보 logsκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μμ²μλ€μ λμ μ¬μμκ°μ΄ κ°μ₯ λ§μ΄ λμ€λ κ³³μ 곡μ΅κ΄κ³ λ₯Ό μ½μ νλ €κ³ ν©λλ€. μ΄λ, 곡μ΅κ΄κ³ κ° λ€μ΄κ° μμ μκ°μ ꡬν΄μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ. λ§μ½, μμ²μλ€μ λμ μ¬μμκ°μ΄ κ°μ₯ λ§μ κ³³μ΄ μ¬λ¬ κ³³μ΄λΌλ©΄, κ·Έ μ€μμ κ°μ₯ λΉ λ₯Έ μμ μκ°μ return νλλ‘ ν©λλ€.
μ ν μ¬ν
- play_time, adv_timeμ κΈΈμ΄ 8λ‘ κ³ μ λ λ¬Έμμ΄μ
λλ€.
- play_time, adv_timeμ HH:MM:SS νμμ΄λ©°, 00:00:01μ΄μ 99:59:59 μ΄νμ λλ€.
- μ¦, λμμ μ¬μμκ°κ³Ό 곡μ΅κ΄κ³ μ¬μμκ°μ 00μκ° 00λΆ 01μ΄ μ΄μ 99μκ° 59λΆ 59μ΄ μ΄νμ λλ€.
- 곡μ΅κ΄κ³ μ¬μμκ°μ λμμ μ¬μμκ°λ³΄λ€ 짧거λ κ°κ² μ£Όμ΄μ§λλ€.
- logsλ ν¬κΈ°κ° 1 μ΄μ 300,000 μ΄νμΈ λ¬Έμμ΄ λ°°μ΄μ
λλ€.
- logs λ°°μ΄μ κ° μμλ μμ²μμ μ¬μ ꡬκ°μ λνλ λλ€.
- logs λ°°μ΄μ κ° μμλ κΈΈμ΄κ° 17λ‘ κ³ μ λ λ¬Έμμ΄μ λλ€.
- logs λ°°μ΄μ κ° μμλ H1:M1:S1-H2:M2:S2 νμμ
λλ€.
- H1:M1:S1μ λμμμ΄ μμλ μκ°, H2:M2:S2λ λμμμ΄ μ’ λ£λ μκ°μ λνλ λλ€.
- H1:M1:S1λ H2:M2:S2λ³΄λ€ 1μ΄ μ΄μ μ΄μ μκ°μΌλ‘ μ£Όμ΄μ§λλ€.
- H1:M1:S1μ H2:M2:S2λ play_time μ΄λ΄μ μκ°μ λλ€.
- μκ°μ λνλ΄λ HH, H1, H2μ λ²μλ 00~99, λΆμ λνλ΄λ MM, M1, M2μ λ²μλ 00~59, μ΄λ₯Ό λνλ΄λ SS, S1, S2μ λ²μλ 00~59κΉμ§ μ¬μ©λ©λλ€. μλͺ»λ μκ°μ μ λ ₯μΌλ‘ μ£Όμ΄μ§μ§ μμ΅λλ€. (μ: 04:60:24, 11:12:78, 123:12:45 λ±)
- return κ°μ νμ
- 곡μ΅κ΄κ³ λ₯Ό μ½μ ν μκ°μ HH:MM:SS νμμ 8μ리 λ¬Έμμ΄λ‘ λ°νν©λλ€.
νμ΄
μκ°μ μ΄λ‘ λ°κΎΈμ΄μ λ°°μ΄μ κ° μ΄λ§λ€ μ¬μλ μλ₯Ό μ μ₯ν΄μ£Όμλ€.
κ·Έλ κ² μ μ₯ν κ°λ€μ startTime = 0μ΄λΆν° μμν΄μ advTime (κ΄κ³ μκ°) λ§νΌ ν©μ λν΄μ
μ΅λ ν©μ΄ λλ startTimeμ ꡬν΄μ£Όμλ°~βΌοΈ
μ¬κΈ°μ sum, max λ long μ΄μ΄μΌνλ€... μ΄κ² λμ ;;; λ§μ΄λ νλ¦Όπ₯Ά
μ½λ
public class κ΄κ³ μ½μ
{
public static String solution(String play_time, String adv_time, String[] logs) {
int playTime = strToSecond(play_time);
int advTime = strToSecond(adv_time);
long[] play = new long[playTime+1];
for(String log : logs){
String[] l = log.split("-");
int startTime = strToSecond(l[0]);
int endTime = strToSecond(l[1]);
for(int i = startTime ; i < endTime ; i++){
play[i]++;
}
}
// 0μ΄ ~ advTime
int startTime = 0;
int endTime = advTime;
long sum = 0;
for(int i = startTime; i < endTime ; i++){
sum += play[i];
}
long max = sum;
int answerTime = startTime;
while(endTime <= playTime){
sum -= play[startTime];
sum += play[endTime];
if(max < sum){
max = sum;
answerTime = startTime + 1;
}
startTime++;
endTime++;
}
return secondToStr(answerTime);
}
private static String secondToStr(int answerTime) {
int hour = answerTime / 3600;
answerTime %= 3600;
int min = answerTime / 60;
int sec = answerTime % 60;
String h = hour > 9 ? String.valueOf(hour) : "0" + hour;
String m = min > 9 ? String.valueOf(min) : "0" + min;
String s = sec > 9 ? String.valueOf(sec) : "0" + sec;
return h + ":" + m + ":" + s;
}
private static int strToSecond(String str) {
String[] time = str.split(":");
int second = Integer.parseInt(time[2]);
second += Integer.parseInt(time[0])*60*60;
second += Integer.parseInt(time[1])*60;
return second;
}
public static void main(String[] args) {
String[] logs = {"01:20:15-01:45:14", "00:40:31-01:00:00", "00:25:50-00:48:29", "01:30:59-01:53:29", "01:37:44-02:02:30"};
System.out.println(solution("02:03:55", "00:14:15", logs));
}
}