1 분 소요

[프로그래머스] 방금 그곡

Algorithm: 시뮬레이션 Created: Apr 30, 2020 7:27 PM DoubleChk: No link: https://programmers.co.kr/learn/courses/30/lessons/17683#

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
#include <sstream>
using namespace std;
typedef struct
{
    int time;
    string name;
    string music;
} info;
vector<info> infos;
int getTime(string start, string end)
{

    vector<int> s, e;
    istringstream is(start);
    string buffer;
    while (getline(is, buffer, ':'))
    {
        s.push_back(atoi(buffer.c_str()));
    }

    is.clear();
    is.str(end);
    while (getline(is, buffer, ':'))
    {
        e.push_back(atoi(buffer.c_str()));
    }

    int ret = 0;
    ret += (e[0] * 60 + e[1]) - (s[0] * 60 + s[1]);
    return ret;
}
string addAllNotes(int time, string str){

    string ret = "";
    if(time > str.length()) time--;
    for(int i=0; i<=time; i++){
        ret += str[i % str.length()];
    }
    return ret;
}
string removeSharp(string str)
{
    size_t pos = 0;
    size_t offset = 0;

    while ((pos = str.find("#", offset)) != string::npos)
    {
        pos--;
        char note = str[pos] - ('A' - 'a');
        string replace = "";
        replace += note;
        str.replace(pos, 2, replace);
        offset = pos + 1;
    }
    return str;
}

string solution(string m, vector<string> musicinfos)
{
    m = removeSharp(m);
    for (string music : musicinfos)
    {
        istringstream is(music);
        string buffer;
        vector<string> v;
        while (getline(is, buffer, ','))
        {
            v.push_back(buffer);
        }

        int time = getTime(v[0], v[1]);
        v[3] = addAllNotes(time, removeSharp(v[3]));
        infos.push_back({time, v[2], v[3]});
    }

    int cnt = 0;
    string answer = "(None)";
    string::size_type n;
    for (info cur : infos)
    {
        n = cur.music.find(m);
        if((int)n >= 0){
            if(cnt < cur.time){
                answer = cur.name;
                cnt = max(cnt, cur.time);
                continue;
            }
        }
    }
    
    return answer;
}
int main()
{

    string ans = solution("ABC", {"12:01,12:14,HELLO,C#DEFGAB", "13:00,13:05,WORLD,ABCDEF"});

    std::cout << ans << endl;

    return 0;
}
  • c++ 문자열 다루기 진짜 귀찮다..
  • #이 들어가 있는 모든 글자를 바꿔준다. (소문자로 바꿔줌)
  • m을 musicinfos에 있다면 답을 업데이트 해 준다. 이 때, cur.time으로 재생 시간을 비교 해 더 오래 틀어진 것으로 업데이트 해 준다.
  • 27번 테스트 케이스가 계속 오류나서 getTime함수를 바꿔주니 됐다.

카테고리:

업데이트: