[알고리즘] 프로그래머스_방금그곡
본 블로그는 비상업적, 비영리적 용도의 학업만을 위해 글을 게시합니다.
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;
}
Author And Source
이 문제에 관하여([알고리즘] 프로그래머스_방금그곡), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fortice/알고리즘-프로그래머스방금그곡저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)