콘솔창 & 윈도우창/코딩 테스트

프로그래머스 - Lv.1 동영상 재생기

뽀또치즈맛 2024. 9. 23. 02:13

코딩테스트 연습 - [PCCP 기출문제] 1번 / 동영상 재생기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

1. 10초 미만인 경우의 max값을 구한다.

2. 오프닝 구간 사이에 있는 경우 오프닝 끝으로 계속 보내주는 걸 고려하기

3. 시간이 최소 시간 이하인 경우, 최대 시간 이상인 경우 고려하기

 

string solution(string video_len, string pos, string op_start, string op_end, vector<string> commands) {
    string answer = "";
    string end = "";
    
    int m1 = video_len[0] - '0', m2 = video_len[1] - '0', s1 = video_len[3] - '0', s2 = video_len[4] - '0';
    s2 -= 9;
    if (s2 < 0) { s1--; s2 += 10; };
    if (s1 < 0) { m2--; s1 = 5; }
    if (m2 < 0) { m1--; m2 = 9; }
    end = to_string(m1) + to_string(m2) + ":" + to_string(s1) + to_string(s2);
    
    for (int i = 0; i < commands.size(); i++) {
        if (op_start <= pos && pos <= op_end) {
            pos = op_end;
        }
        int m1 = pos[0] - '0', m2 = pos[1] - '0', s1 = pos[3] - '0', s2 = pos[4] - '0';
        if (commands[i] == "next") {
            string tpos = "";
            s1++;
            if (s1 >= 6) { m2++; s1 = 0; }
            if (m2 >= 10) { m1++; m2 = 0; }
            tpos = to_string(m1) + to_string(m2) + ":" + to_string(s1) + to_string(s2);
            pos = tpos;
            if (tpos >= end)
                pos = video_len;
        }
        else if (commands[i] == "prev") {
            string tpos = "";
            s1--;
            if (s1 < 0) { m2--; s1 = 5; }
            if (m2 < 0) { m1--; m2 = 9; }
            tpos = to_string(m1) + to_string(m2) + ":" + to_string(s1) + to_string(s2);
            pos = tpos;
            if (tpos <= "00:09")
                pos = "00:00";
        }
    }

    if (op_start <= pos && pos <= op_end) {
        pos = op_end;
    }
    return answer = pos;
}