[알고리즘] 프로그래머스_방금그곡

Fortice·2021년 7월 2일
0

알고리즘

목록 보기
17/18

본 블로그는 비상업적, 비영리적 용도의 학업만을 위해 글을 게시합니다.

1. 문제 분석

  • 재생 시간이 가장 높은, m 멜로디가 나오는 곡을 찾아야한다.

2. 문제 풀이 과정(삽질)

  • 괜히 m 멜로디가 여러개 나오는 걸로 이해를 잘못하면 삽질한다.
  • 일단 #의 처리가 은근 까다로웠다.
    • 처음에 그냥 처리하다가 # 자체를 바꿔주는 팁을 발견해서 최대 음인 G이상으로 만들기 위해 10을 더해줬다.

3. 문제 해결

  • 재생 시간 계산 후 m 멜로디와 벡터 속 멜로디의 #음을 변경시킨다.
  • 이후 find 라이브러리 함수를 사용해 찾아주고 최대 재생 시간이면 답에 기록해준다.

4. 코드

#include <string>
#include <vector>

using namespace std;


int getPlaytime(string start, string end)
{
    int startHour = stoi(start.substr(0, 2));
    int startMinute = stoi(start.substr(3, 2));
    int endHour = stoi(end.substr(0, 2));
    int endMinute = stoi(end.substr(3, 2));
    
    return (endHour - startHour) * 60 + (endMinute - startMinute);
}

string changeSharp(string s)
{
    string change = "";
    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '#')
            change[change.length() - 1] += 10;
        else
            change += s[i];
    }
    return change;
}

string solution(string m, vector<string> musicinfos) {
    int playtime = 0, maxPlaytime = 0;
    int spot = 0;
    string music = "";
    string melody = "", allMelody = "", changeM = changeSharp(m);
    string answer = "";
    
    for(int i = 0; i < musicinfos.size(); i++)
    {
        allMelody = "";
        music = musicinfos[i];
        playtime = getPlaytime(music.substr(0, 5), music.substr(6, 5));
        spot = music.find(',', 12) + 1;
        melody = changeSharp(music.substr(spot, music.length() - spot));
            
        if(changeM.length() > playtime)
            continue;
        
        while(playtime > allMelody.length())
            allMelody += melody;
        allMelody = allMelody.substr(0, playtime);
        
        //cout << allMelody << '\n' << changeM <<"\n\n";
        
        if(allMelody.find(changeM, 0) != -1)
        {
            if(maxPlaytime < playtime)
            {
                answer = music.substr(12, spot - 13);
                maxPlaytime = playtime;
            }
        }
    }       
    
    if(!maxPlaytime)
        return "(None)";
    
    return answer;
}
profile
서버 공부합니다.

0개의 댓글