[프로그래머스] 방금 그곡
[프로그래머스] 방금 그곡
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함수를 바꿔주니 됐다.