본문 바로가기
프로그래머스

광고 삽입 C++

by paysmile 2021. 7. 7.

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

#include <iostream>
#include <string>
#include <vector>
using namespace std;
const int MAX = 30000000;
int tm[MAX];

string solution(string play_time, string adv_time, vector<string> logs) {
    string answer = "";
    int hour = stoi(play_time.substr(0, 2)) * 60 * 60;
    int min = stoi(play_time.substr(3, 2))*60;
    int sec = stoi(play_time.substr(6, 2));
    int end_time = hour + min + sec;
    
    hour = stoi(adv_time.substr(0, 2)) * 60 * 60;
    min = stoi(adv_time.substr(3, 2)) * 60;
    sec = stoi(adv_time.substr(6, 2));
    int adv = hour + min + sec;
    
    if(adv == end_time)
        return "00:00:00";
    
    for (int i = 0; i < logs.size(); i++) {
        hour = stoi(logs[i].substr(0, 2)) * 60 * 60;
        min = stoi(logs[i].substr(3, 2)) * 60;
        sec = stoi(logs[i].substr(6, 2));
        int start = hour + min + sec;
        hour = stoi(logs[i].substr(9, 2)) * 60 * 60;
        min = stoi(logs[i].substr(12, 2)) * 60;
        sec = stoi(logs[i].substr(15, 2));
        int end = hour + min + sec;
        for (int j = start; j < end; j++) {
            tm[j] += 1;
        }
    }
    
    long long value = 0;
    int min_time = MAX;
    
    for(int i=0; i<end_time-adv+1; i++){
        long long tmp=0;
        
        for(int j=0; j<adv; j++){
            tmp += tm[j+i];
        }
        
        if(tmp > value) {
            min_time = i;
            value = tmp;
        }
        else if(tmp == value && i < min_time) {
            min_time = i;
            value = tmp;
        }
    }
    
    if(min_time == MAX) return "00:00:00";
    
    hour = min_time / 3600;
    min = (min_time % 3600) / 60;
    sec = min_time % 60;
    
    if(hour <= 9)   answer = "0" + to_string(hour) + ":";
    else    answer = to_string(hour) + ":";
    
    if(min <= 9)    answer += "0" + to_string(min) + ":";
    else    answer += to_string(min) + ":";
    
    if(sec <= 9)    answer += "0" + to_string(sec);
    else    answer += to_string(sec);
    
    
    return answer;
}

'프로그래머스' 카테고리의 다른 글

괄호 변환 C++  (0) 2021.08.08
카드 짝 맞추기 C++  (0) 2021.08.01
순위 검색 C++  (0) 2021.07.01
메뉴 리뉴얼 C++  (0) 2021.06.30
신규 아이디 C++  (0) 2021.06.28