문제 URL : https://programmers.co.kr/learn/courses/30/lessons/17683
문제접근법 : 레벨2 문제였지만 개인적으로 3정도는 된다고 생각합니다.
c++로 푼다면 문자열 STL을 쓸줄 모른다면 진짜 노가다 문제입니다.
c++ regex를 이용해서 #으로 끝나는 단어들을 전부 바꿔주시면 C# -> c 가 될테니 다른음과 마찬가지로 한개의 문자가 되어 C와 C#을 따로 고민할 필요가없겠죠? regex를 이용하시는게 정말 편합니다. 그걸이용하세요
split를 따로구현해서 ,(콤마)로 문자열을 분리하면 반드시 4개의 문자열이 나옵니다.
시간함수 따로 구현한다음 문제에 조건대로
시뮬레이션 구현하면 되는문제입니다.
이건 문자열 다루는 문제라 c++을 알고리즘으로 공부하신다면 문자열 약하신분은 문자열 자르기나 regex부분을 공부하시고 푸는게 좋을듯합니다.
소스코드 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#include <bits/stdc++.h>
using namespace std;
vector<string> before = { "C#","D#","F#","G#","A#" };
vector<string> after = { "c","d","f","g","a" };
vector<string> split(string& s,char delimiter=' ') {
stringstream ss(s);
vector<string> v;
string temp;
while (getline(ss, temp, delimiter))v.push_back(temp);
return v;
}
//#으로 끝나는 음을 전부 소문자로 바꿈
string Replace(string s) {
for (int i = 0; i < before.size(); i++)
s = regex_replace(s, regex(before[i]), after[i]);
return s;
}
//시간으로 바꾸기
int toTime(string s) {
int h = stoi(s.substr(0, 2));
int m = stoi(s.substr(3, 2));
return h * 60 + m;
}
string solution(string m, vector<string> musicinfos) {
string answer = "";
vector<tuple<int, int, string>>res;//재생시간, 인덱스, 음악제목
m = Replace(m);
for (int i = 0; i < musicinfos.size(); i++) {
vector<string> v = split(musicinfos[i], ','); // ,를 기준으로 자름 4개의 문자열이나옴
int time = toTime(v[1]) - toTime(v[0]);
if (time < m.size())continue; //재생시간이 m길이보다 작다면 그음악은 될수없음
string s;
v[3] = Replace(v[3]);
for (int j = 0; j < time; j++)
s += v[3][j % v[3].size()];
for (int j = 0; j <= s.size() - m.size(); j++) {
string t = s.substr(j, m.size());//인덱스 처음부터 다잘라보고 맞는거 찾음
if (t == m) {
res.push_back({ -time,i,v[2] });
break;
}
}
}
if (res.empty())
return "(None)";
sort(res.begin(), res.end());
return get<2>(res[0]);
}
|
cs |
궁금한점 혹은 모르는점 어떤질문이든 댓글은 언제나 환영입니다.
'프로그래머스' 카테고리의 다른 글
프로그래머스 신규 아이디 추천(2021 KAKAO BLIND RECRUITMENT) (0) | 2021.07.31 |
---|---|
프로그래머스 삼각 달팽이 (0) | 2021.07.31 |
프로그래머스 행렬의 곱셈 (0) | 2021.07.30 |
프로그래머스 미로 탈출 (2021 카카오 채용연계형 인턴십) (2) | 2021.07.28 |
프로그래머스 2개 이하로 다른 비트 (0) | 2021.07.28 |