ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 방금그곡
    문제 풀이 2020. 6. 4. 16:38

    풀이)

    사소한 실수로 시간이 오래 걸린 문제이다.


    C#은 하나의 멜로디로 봐야하는데, C와 #을 따로따로 개수를 세어버렸다.


    3번째 예시로 설명하자면,

    HELLO 는 12:00 ~ 12:14 재생시간이므로 악보는 C#DEFGABC#DEFGAB 이다. 

    근데 이를 1분당 1멜로디, 총 14멜로디 즉, C#DEFGABC#DEFG 여기까지만 악보라고 생각해서 틀렸었다.

    문제를 주의해서 읽자.


    -전반적인 풀이과정-

    찾는 멜로디를 수정해준다. (C#이라면 c로 바꿔서, 하나의 멜로디로 바꿔준다.)

    곡 정보 담은 배열을 둘러본다.

    1. 음악 요소 string을 시작시간, 끝난시간, 제목, 악보들로 나눈다.

    2. 시작시간과 끝난시간을 분(minute)으로 바꿔서, 재생시간을 구해준다.

    3. 악보의 멜로디를 수정해준다. (C#이라면 c로 바꿔서, 하나의 멜로디로 바꿔준다.)

    4. 재생시간에 맞춰 곡의 멜로디를 자르거나 늘려준다.

    5. 곡 멜로디 안에 찾는 멜로디가 있는지 확인해준다.

        -> 있다면, 라디오에서 재생된 시간이 이전에 찾은 곡보다 길다면 우선시

                      재생시간에 같다면, 먼저 확인한 곡이 우선시



    코드)

    #include <string> #include <vector> using namespace std; string change(string s){ // #붙은거를 바꾸기 (C# -> c) string temp= ""; for(int i=0;i<s.length();i++){ if(i+1 < s.length() && s[i+1] == '#'){ temp += s[i] + 32; i++; continue; } temp += s[i]; } return temp; } string solution(string m, vector<string> musicinfos) { m = change(m); pair<int,string> result = {-1,"(None)"}; //조건이 일치한 음악의 재생시간과, 제목 저장하는 변수 for(int i=0;i<musicinfos.size();i++){ int start = stoi(musicinfos[i].substr(0,2)) * 60 + stoi(musicinfos[i].substr(3,2)); int end = stoi(musicinfos[i].substr(6,2)) * 60 + stoi(musicinfos[i].substr(9,2)); string title = "", music = ""; int j = 12; //제목 for(j;j<musicinfos[i].length();){ if(musicinfos[i][j] == ',') break; title += musicinfos[i][j]; j++; } //악보 for(j++;j<musicinfos[i].length();){ music += musicinfos[i][j]; j++; } music = change(music); int time = end - start; //재생시간 if(time < music.length()) music = music.substr(0,time); else if(time > music.length()){ string temp = music; while(temp.length() < time){ for(int t=0;t<music.length() && temp.length() < time ;t++){ temp += music[t]; } } music = temp; } int test = music.find(m); // 같은 음들이 있을 경우, 인덱스 반환 if(test < 0) continue;//음이 같지 않음 //재생시간 제일 긴 -> 재생시간이 같다면 먼저 입력된 음악제목 if(result.first < time){ result.first = time; result.second = title; } } return result.second; }




    '문제 풀이' 카테고리의 다른 글

    [프로그래머스] 지형이동  (0) 2020.06.05
    [프로그래머스] 파일명정렬  (0) 2020.06.04
    [프로그래머스] 오픈채팅방  (0) 2020.06.03
    [프로그래머스] 캐시  (0) 2020.06.03
    [프로그래머스] 뉴스클러스터링  (0) 2020.06.02

    댓글

Designed by Tistory.