본문 바로가기

알고리즘 · 코딩

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

2018 카카오 / KAKAO BLIND RECRUITMENT

 

문제 링크

programmers.co.kr/learn/courses/30/lessons/17683

 

코딩테스트 연습 - [3차] 방금그곡

방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,

programmers.co.kr


C++ 풀이

#include <string>
#include <vector>
using namespace std;

string solution(string m, vector<string> musicinfos) {
    int answer_song_play_time = 0;
    string answer_song_title = "(None)";

    for (int i = 0; i < musicinfos.size(); i++) {
        int start_time = ((((musicinfos[i][0] - '0') * 10) + (musicinfos[i][1] - '0')) * 60) + ((musicinfos[i][3] - '0') * 10) + (musicinfos[i][4] - '0');
        int end_time = ((((musicinfos[i][6] - '0') * 10) + (musicinfos[i][7] - '0')) * 60) + ((musicinfos[i][9] - '0') * 10) + (musicinfos[i][10] - '0');
        int play_time = end_time - start_time;
        string song_title = "", song_melody = "";
        for (int j = 12; j < musicinfos[i].length(); j++) {
            if (musicinfos[i][j] == ',') {
                song_melody = musicinfos[i].substr(j + 1); //악보 정보
                break;
            }
            else
                song_title += musicinfos[i][j]; //음악 제목
        }

        int melody_index = 0;
        string whole_melody;//전체 재생된 멜로디
        for (int j = 0; j < play_time; j++) {
            whole_melody += song_melody[melody_index];
            melody_index++;
            if (song_melody[melody_index] == '#')
            {
                whole_melody += song_melody[melody_index];
                melody_index++;
            }
            if (melody_index >= song_melody.length())
                melody_index = 0;
        }

        if (whole_melody.length() >= m.length()) {
            for (int j = 0; j <= whole_melody.length() - m.length(); j++) {
                if (m == whole_melody.substr(j, m.length())) {
                
                	//멜로디 뒤에 #이 붙어있는지 확인
                    if (!(j + m.length() < whole_melody.length() && whole_melody[j + m.length()] == '#')) {
                    	
                        //재생시간이 더 큰 경우에만 저장한 곡 갱신
                        if (play_time > answer_song_play_time) { 
                            answer_song_title = song_title;
                            answer_song_play_time = play_time;
                            break;
                        }
                    }
                }
            }
        }
    }
   return answer_song_title;
}

 

 

 

반응형