- TC 27,30 미통과 93.3

#include <iostream>
#include <string>
#include <vector>

using namespace std;

string solution(string m, vector<string> musicinfos) {
    
    for (int x = 0; x < m.size(); x++) {
        if (m[x] == '#') {
            m[x - 1] += 'a' - 'A';
            m.erase(x, 1);
            x--;
        }
    }

    int answerStart;
    int answerTime;
    string answerTitle;

    int SIZE = musicinfos.size();
    for (int i = 0; i < SIZE; i++) {

        string startTime;
        string endTime;
        string musicTitle;
        string musicWords;

        musicinfos[i] += ',';
        int a = 0;
        int j = 0;

        while (1) {
            int b = musicinfos[i].find(',', a);
            if (b == -1)
                break;

            if (j == 0) {
                string sub = musicinfos[i].substr(a, b - a);
                sub.erase(2, 1);
                /*if (sub >= "0000" && sub <= "0059") {
                    sub.erase(0, 2);
                    sub.insert(0, "24");
                }*/
                startTime = sub;
            }

            else if(j == 1) {
                string sub = musicinfos[i].substr(a, b - a);
                sub.erase(2, 1);
                /*if (sub >= "0000" && sub <= "0059") {
                    sub.erase(0, 2);
                    sub.insert(0, "24");
                }*/
                endTime = sub;
            }

            else if(j==2) musicTitle = musicinfos[i].substr(a, b - a);
            
            else {
                musicWords = musicinfos[i].substr(a, b - a);
                int tmplen = stoi(endTime) - stoi(startTime);
                int infolen = musicWords.size();

                for (int x = 0; x < infolen; x++) {
                    if (musicWords[x] == '#') {
                        musicWords[x - 1] += 'a' - 'A';
                        musicWords.erase(x, 1);
                        x--;
                    }
                }

                while (1) {
                    infolen = musicWords.size();
                    if (infolen >= tmplen)
                        break;

                    musicWords += musicWords;
                }

                if (infolen >= tmplen)
                    musicWords.erase(tmplen, infolen - tmplen);
            }
            
            j++;
            a = b + 1;
            
        }

        int ret = musicWords.find(m, 0);
        if (ret > -1) {
            if (answerTitle == "") {
                answerTime = stoi(endTime) - stoi(startTime);
                answerTitle = musicTitle;
                answerStart = stoi(startTime);
            }
            else {
                int sizeCheck = stoi(endTime) - stoi(startTime);
                if (answerTime < sizeCheck) {
                    answerTime = sizeCheck;
                    answerTitle = musicTitle;
                    answerStart = stoi(startTime);
                }
                /*else if (answerTime == sizeCheck) {
                    if (answerStart > stoi(startTime)) {
                        answerTime = stoi(endTime) - stoi(startTime);
                        answerTitle = musicTitle;
                        answerStart = stoi(startTime);
                    }
                }*/
            }
        }

    }

    if (answerTitle == "")
        return "(None)";

    return answerTitle;
}

 

- Duration 재생시간 몇분인지 구하는 공식 확인, (27통과)

  음악 길이보다 재생된 시간이 짧을 때는 처음부터 재생 시간만큼만 재생된다. -> 해당조건 재확인(30통과)

#include <iostream>
#include <string>
#include <vector>

using namespace std;

string solution(string m, vector<string> musicinfos) {
    
    for (int x = 0; x < m.size(); x++) {
        if (m[x] == '#') {
            m[x - 1] += 'a' - 'A';
            m.erase(x, 1);
            x--;
        }
    }

    int answerTime;
    string answerTitle;

    int SIZE = musicinfos.size();
    for (int i = 0; i < SIZE; i++) {

        string startTime;
        string endTime;
        int musicDuration;
        string musicTitle;
        string musicWords;

        musicinfos[i] += ',';
        int a = 0;
        int j = 0;

        while (1) {
            int b = musicinfos[i].find(',', a);
            if (b == -1)
                break;

            if (j == 0) {
                string sub = musicinfos[i].substr(a, b - a);
                sub.erase(2, 1);
                startTime = sub;
            }

            else if(j == 1) {
                string sub = musicinfos[i].substr(a, b - a);
                sub.erase(2, 1);
                endTime = sub;

                int sth = stoi(startTime.substr(0, 2));
                int stm = stoi(startTime.substr(2, 2));
                int eth = stoi(endTime.substr(0, 2));
                int etm = stoi(endTime.substr(2, 2));

                int h = eth - sth;
                int m = etm - stm;
                if (h < 0) h += 24;
                if (m < 0) {
                    h -= 1;
                    m += 60;
                }

                musicDuration = h * 60 + m;
            }

            else if(j==2) musicTitle = musicinfos[i].substr(a, b - a);
            
            else {
                musicWords = musicinfos[i].substr(a, b - a);
                int infolen = musicWords.size();

                for (int x = 0; x < infolen; x++) {
                    if (musicWords[x] == '#') {
                        musicWords[x - 1] += 'a' - 'A';
                        musicWords.erase(x, 1);
                        x--;
                    }
                }

                while (1) {
                    infolen = musicWords.size();
                    if (infolen >= musicDuration)
                        break;

                    musicWords += musicWords;
                }
                
                musicWords.erase(musicDuration, infolen - musicDuration);

            }
            
            j++;
            a = b + 1;
            
        }

        int ret = musicWords.find(m, 0);
        if (ret > -1) {
            

            if (answerTitle == "") {
                answerTime = musicDuration;
                answerTitle = musicTitle;
            }
            else {
                if (answerTime < musicDuration) {
                    answerTime = musicDuration;
                    answerTitle = musicTitle;
                }
            }
        }

    }

    if (answerTitle == "")
        return "(None)";

    return answerTitle;
}

int main() {

    string m = "CC#BCC#BCC#BCC#B";
    vector<string> musicinfos = { "03:00,03:30,FOO,CC#B", "23:59,00:08,BAR,CC#BCC#BCC#B" };

    cout << solution(m, musicinfos);

    return 0;
}

+ Recent posts