문제를 풀면서 여러 조건을 추가했고, 정확성이 50 -> 70 -> 98 -> 100 순으로 향상했다.
정답을 맞추긴 했지만, 내 코드가 정답이라고 하긴 어려워 보인다.
(기존 코드를 개선하기는 방법으로는 토큰화나 변환이 있다)
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
vector<vector<string>> store;
string solution(string m, vector<string> musicinfos) {
string answer = "(None)";
int cur = 0;
string str = "";
vector<string> vec;
vector<pair<int, int>> answerList;
//','를 기준으로 문자열 분리
for(int index = 0; index < musicinfos.size(); index++) {
cur = 0, vec.clear(), str = "";
while(cur < musicinfos[index].size()) {
if(musicinfos[index][cur] != ',') {
str = str + musicinfos[index][cur];
} else {
vec.push_back(str);
str = "";
}
cur++;
}
vec.push_back(str);
store.push_back(vec);
}
string a = "", b = "";
string title = "";
for(int i = 0; i < musicinfos.size(); i++) {
//시간 계산
a = "", b = "";
a = a + store[i][1][0] + store[i][1][1];
b = b + store[i][0][0] + store[i][0][1];
int hour = stoi(a) - stoi(b);
hour = hour * 60;
a = "", b = "";
a = a + store[i][1][3] + store[i][1][4];
b = b + store[i][0][3] + store[i][0][4];
int minute = stoi(a) - stoi(b);
minute = minute + hour;
title = "";
int setTitleTime = minute;
//'#'과 이 나오는 경우 이전 문자와 토큰화해 길이를 1로 봐야하기 때문에 '#'이 나올 때 setTitleTime값을 증가
for(int index = 0; index < setTitleTime; index++) {
if(store[i][3][index % store[i][3].size()] == '#') {
setTitleTime++;
}
title = title + store[i][3][index % store[i][3].size()];
}
//"ABCD#"일 때 setTitleTime값이 4라면 'D#'이 아닌 'D'가 추가되기 때문에 아래의 조건문을 추가한다.
if(store[i][3][setTitleTime % store[i][3].size()] == '#') {
title = title + '#';
}
//m과 title[k:k+m.length()]를 처음 문자부터 마지막 문자까지 비교해서
//반복문이 마지막에 도달하면서 그 다음 문자가 '#'이 닐 때 정답 배열에 추가
for(int k = 0; k < title.length(); k++) {
for(int j = k; j < k + m.size() && j < title.length(); j++) {
if(title[j] != m[j - k]) {
break;
}
if(j == k + m.size() - 1 && !(j < title.length() - 1 && title[j + 1] == '#')) {
answerList.push_back({ i, minute });
}
}
}
}
int max = 0;
for(int index = 0; index < answerList.size(); index++) {
if(answerList[index].second > max) {
max = answerList[index].second;
answer = store[answerList[index].first][2];
}
}
return answer;
}
|
cs |
아래는 # 체크하는 부분 개선한 코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<string>> store;
string solution(string m, vector<string> musicinfos) {
string answer = "(None)";
string str = "";
for(int index = 0; index < m.length(); index++) {
if(m[index + 1] == '#') {
str = str + char(m[index] + 32);
index++;
} else {
str = str + m[index];
}
}
m.clear();
m.assign(str);
int cur = 0;
vector<string> vec;
vector<pair<int, int>> answerList;
for(int index = 0; index < musicinfos.size(); index++) {
cur = 0, vec.clear(), str = "";
while(cur < musicinfos[index].size()) {
if(musicinfos[index][cur] != ',') {
if(musicinfos[index][cur + 1] == '#') {
str = str + char(musicinfos[index][cur] + 32);
cur++;
} else {
str = str + musicinfos[index][cur];
}
} else {
vec.push_back(str);
str = "";
}
cur++;
}
vec.push_back(str);
store.push_back(vec);
}
string a = "", b = "";
string title = "";
for(int i = 0; i < musicinfos.size(); i++) {
a = "", b = "";
a = a + store[i][1][0] + store[i][1][1];
b = b + store[i][0][0] + store[i][0][1];
int hour = stoi(a) - stoi(b);
hour = hour * 60;
a = "", b = "";
a = a + store[i][1][3] + store[i][1][4];
b = b + store[i][0][3] + store[i][0][4];
int minute = stoi(a) - stoi(b);
minute = minute + hour;
title = "";
int setTitleTime = minute;
for(int index = 0; index < minute; index++) {
title = title + store[i][3][index % store[i][3].size()];
}
for(int k = 0; k < title.length(); k++) {
for(int j = k; j < k + m.size() && j < title.length(); j++) {
if(title[j] != m[j - k]) {
break;
}
if(j == k + m.length() - 1 && !(j < title.length() - 1 && title[j + 1] == '#')) {
answerList.push_back({ i, minute });
}
}
}
}
int max = 0;
for(int index = 0; index < answerList.size(); index++) {
if(answerList[index].second > max) {
max = answerList[index].second;
answer = store[answerList[index].first][2];
}
}
return answer;
}
|
cs |
'problem solving' 카테고리의 다른 글
[프로그래머스]파일명 정렬 (0) | 2020.07.13 |
---|---|
[프로그래머스]압축문자열 (0) | 2020.07.12 |
[ 프로그래머스]다음 큰 숫자 (0) | 2020.03.28 |
[프로그래머스]단체사진 찍기 (0) | 2020.03.28 |
[SWEA]2814. 최장 경로 (0) | 2020.03.15 |