📌 2018 KAKAO BLIND RECRUITMENT
⭐️ 문자열 구현
#
이 붙은 음계도 하나의 음계로 인식해야하기 하는데 문자열 탐색할 때 번거롭기 때문에 C#
➡️ c(소문자)
이런 방식으로 치환getline
으로 ,
기준으로 문자열 분할하여 재생 시작 시간, 재생 종료 시간, 곡명, 음계를 저장find
함수 사용하여 재생 음계에 멜로디의 포함 여부 확인하고 포함되어 있고 이전에 저장된 음계보다 재생 시간이 길면 곡명과 재생 길이 갱신 replace
를 사용해야했으나 익숙하지 않아서 힘들었음🔗 문자열 find 링크
🔗 문자열 치환
#include <string>
#include <vector>
#include <iostream>
#include <sstream>
using namespace std;
string nosharp(string s) {
int len=s.size();
for(int i=0;i<len;i++) {
if(s[i]=='#') {
string ch="";
ch+=tolower(s[i-1]);
s.replace(i-1,2,ch);
}
}
return s;
}
string solution(string m, vector<string> musicinfos) {
string answer = "";
int ans_cnt=0;
m=nosharp(m);
for(int i=0;i<musicinfos.size();i++) {
string s=musicinfos[i];
istringstream ss(s);
string sb;
vector<string> v;
while(getline(ss,sb,',')) {
v.push_back(sb);
}
string st= v[0];
int sh=stoi(st.substr(0,2));
int sm=stoi(st.substr(3));
string et= v[1];
int eh=stoi(et.substr(0,2));
int em=stoi(et.substr(3));
int cnt=(eh*60+em)-(sh*60+sm); // 곡 재생수
string name= v[2];
string music= v[3];
// 전체 음계
string total="";
music=nosharp(music);
int len=music.size();
for(int j=0;j<cnt;j++) {
total+=music[j%len];
}
if(total.find(m)!=string::npos && cnt>ans_cnt) {
ans_cnt=cnt;
answer=name;
}
}
if(answer=="") return "(None)";
return answer;
}