- TC 27,30 미통과 93.3
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string solution(string m, vector<string> musicinfos) {
for (int x = 0; x < m.size(); x++) {
if (m[x] == '#') {
m[x - 1] += 'a' - 'A';
m.erase(x, 1);
x--;
}
}
int answerStart;
int answerTime;
string answerTitle;
int SIZE = musicinfos.size();
for (int i = 0; i < SIZE; i++) {
string startTime;
string endTime;
string musicTitle;
string musicWords;
musicinfos[i] += ',';
int a = 0;
int j = 0;
while (1) {
int b = musicinfos[i].find(',', a);
if (b == -1)
break;
if (j == 0) {
string sub = musicinfos[i].substr(a, b - a);
sub.erase(2, 1);
/*if (sub >= "0000" && sub <= "0059") {
sub.erase(0, 2);
sub.insert(0, "24");
}*/
startTime = sub;
}
else if(j == 1) {
string sub = musicinfos[i].substr(a, b - a);
sub.erase(2, 1);
/*if (sub >= "0000" && sub <= "0059") {
sub.erase(0, 2);
sub.insert(0, "24");
}*/
endTime = sub;
}
else if(j==2) musicTitle = musicinfos[i].substr(a, b - a);
else {
musicWords = musicinfos[i].substr(a, b - a);
int tmplen = stoi(endTime) - stoi(startTime);
int infolen = musicWords.size();
for (int x = 0; x < infolen; x++) {
if (musicWords[x] == '#') {
musicWords[x - 1] += 'a' - 'A';
musicWords.erase(x, 1);
x--;
}
}
while (1) {
infolen = musicWords.size();
if (infolen >= tmplen)
break;
musicWords += musicWords;
}
if (infolen >= tmplen)
musicWords.erase(tmplen, infolen - tmplen);
}
j++;
a = b + 1;
}
int ret = musicWords.find(m, 0);
if (ret > -1) {
if (answerTitle == "") {
answerTime = stoi(endTime) - stoi(startTime);
answerTitle = musicTitle;
answerStart = stoi(startTime);
}
else {
int sizeCheck = stoi(endTime) - stoi(startTime);
if (answerTime < sizeCheck) {
answerTime = sizeCheck;
answerTitle = musicTitle;
answerStart = stoi(startTime);
}
/*else if (answerTime == sizeCheck) {
if (answerStart > stoi(startTime)) {
answerTime = stoi(endTime) - stoi(startTime);
answerTitle = musicTitle;
answerStart = stoi(startTime);
}
}*/
}
}
}
if (answerTitle == "")
return "(None)";
return answerTitle;
}
- Duration 재생시간 몇분인지 구하는 공식 확인, (27통과)
음악 길이보다 재생된 시간이 짧을 때는 처음부터 재생 시간만큼만 재생된다. -> 해당조건 재확인(30통과)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string solution(string m, vector<string> musicinfos) {
for (int x = 0; x < m.size(); x++) {
if (m[x] == '#') {
m[x - 1] += 'a' - 'A';
m.erase(x, 1);
x--;
}
}
int answerTime;
string answerTitle;
int SIZE = musicinfos.size();
for (int i = 0; i < SIZE; i++) {
string startTime;
string endTime;
int musicDuration;
string musicTitle;
string musicWords;
musicinfos[i] += ',';
int a = 0;
int j = 0;
while (1) {
int b = musicinfos[i].find(',', a);
if (b == -1)
break;
if (j == 0) {
string sub = musicinfos[i].substr(a, b - a);
sub.erase(2, 1);
startTime = sub;
}
else if(j == 1) {
string sub = musicinfos[i].substr(a, b - a);
sub.erase(2, 1);
endTime = sub;
int sth = stoi(startTime.substr(0, 2));
int stm = stoi(startTime.substr(2, 2));
int eth = stoi(endTime.substr(0, 2));
int etm = stoi(endTime.substr(2, 2));
int h = eth - sth;
int m = etm - stm;
if (h < 0) h += 24;
if (m < 0) {
h -= 1;
m += 60;
}
musicDuration = h * 60 + m;
}
else if(j==2) musicTitle = musicinfos[i].substr(a, b - a);
else {
musicWords = musicinfos[i].substr(a, b - a);
int infolen = musicWords.size();
for (int x = 0; x < infolen; x++) {
if (musicWords[x] == '#') {
musicWords[x - 1] += 'a' - 'A';
musicWords.erase(x, 1);
x--;
}
}
while (1) {
infolen = musicWords.size();
if (infolen >= musicDuration)
break;
musicWords += musicWords;
}
musicWords.erase(musicDuration, infolen - musicDuration);
}
j++;
a = b + 1;
}
int ret = musicWords.find(m, 0);
if (ret > -1) {
if (answerTitle == "") {
answerTime = musicDuration;
answerTitle = musicTitle;
}
else {
if (answerTime < musicDuration) {
answerTime = musicDuration;
answerTitle = musicTitle;
}
}
}
}
if (answerTitle == "")
return "(None)";
return answerTitle;
}
int main() {
string m = "CC#BCC#BCC#BCC#B";
vector<string> musicinfos = { "03:00,03:30,FOO,CC#B", "23:59,00:08,BAR,CC#BCC#BCC#B" };
cout << solution(m, musicinfos);
return 0;
}