티스토리 뷰
문제 링크
풀이
문제를 보고 이건 그냥 열심히 비교해서 풀어야겠다. 라는 생각이 들고 나서 열심히 for문 돌렸다.
[요약]
0) 선행처리
m 변수를 선행으로 미리 '#'은 대문자가 아닌 소문자로 치환했다.(*중요*)
ex) C# -> c, D# -> d
- 예전에 치환문제로 간단하게 풀리는거를 조건 따지면서 머리 굴린 적이 있었는데 이번에는 바로 생각났다.
참고로) 여기서는 string의 back() 참조자를 이용하여 아스키 코드 값을 연산했다.
1) 재생된 길이 추출
재생된 분(min) = (시작(h) - 종료(h)) * 60 + (시작(m) - 종료(m)
- stoi(substr()) 이용했다.
- substr 잘못하면 stoi가 처음부터 '0'~'9'가 아닌 다른 문자를 읽으면 exception이 발생한다.
2) 제목도 추출
3) 악보도 추출
- 악보도 선행 처리와 마찬가지고 '#'은 모두 치환
4) 비교
4-1) 악보를 재생된 길이만큼 늘이거나 줄임
4-2) 악보.find(기억)으로 비교(못찾을 경우 string::npos와 같다.)
4-3) 재생된 길이 max 값을 초기화하면서 answer에 대입. 같으면 안된다.(먼저 입력된 것이 반환되야 하므로)
아! 한 번에 성공하지 못했는데 그 이유는 조건에 맞지 않으면 `(None)` 을 출력하라길래 했더니 틀렸다..
질문하기 보니까 (None)이래서 했더니 성공이다.
왜 백틱문자( ` )를 넣게 했는지... js 코딩하시느라 템플릿 리터럴 쓰다가 실수하신 듯 하다.
`(None)` -> (None)
#include <string>
#include <vector>
#include <iostream>
using namespace std;
// 재생 시간과 제공된 악보를 직접 보면서 비교
// 1) 음악 제목, 2) 끝난 시각, 3) 악보 를 제공
// 음은 12개
// 음은 1분에 1개 재생
// (음악 길이 < 재생된 시간) OR (음악 길이 > 재생된 시간)
// 조건이 일치하는 음악이 여러 개 일때는 제일 긴 음악 반환
// 재생된 시간도 같을 경우 먼저 입력된 음악 제목 반환
// 일치 X -> "`(None)`"
string solution(string m, vector<string> musicinfos) {
string answer = "(None)";
// pre-TODO
string memo;
for(int i=0; i<m.length(); i++){
if(m[i] != '#') memo.push_back(m[i]);
else memo.back() -= ('A' - 'a');
}
// TODO
int max = 0; // 여러 개 구분(재생 시간 max)
for(string s : musicinfos){
// 재생된 시간
int min = (stoi(s.substr(6, 2)) - stoi(s.substr(0, 2))) * 60;
min += stoi(s.substr(9, 2)) - stoi(s.substr(3, 2));
// 제목
string title;
int i=12; // ',' skip
while(s[i]!=','){
title.push_back(s[i]);
i++;
}
i++; // ',' skip
// 악보
string sheet; // 소문자: '#' 들어감 ex) C# = c
while(i<s.length()){
if(s[i] != '#') sheet.push_back(s[i]);
else sheet.back() -= ('A' - 'a');
i++;
}
// 비교 - 제목(title), 길이(min), 악보(sheet)
string cmpString; // 비교할 멜로디
for(int a=0; a<min; a++){
cmpString.push_back(sheet[a % sheet.length()]);
}
if(string::npos != cmpString.find(memo)){ // 찾았다.
if(max < min) {
max = min;
answer = title; // 제일 긴 길이의 먼저 입력된 음악
}
}
}
return answer;
}
'Programmers Solutions > previous' 카테고리의 다른 글
[3차] 파일명 정렬(2018 카카오 블라인드 채용) (0) | 2020.08.16 |
---|---|
[3차] 압축(2018 카카오 블라인드 채용) (0) | 2020.08.10 |
후보키(2019 카카오 블라인드 채용) (0) | 2020.08.08 |
오픈채팅방(2019 카카오 블라인드 채용) (0) | 2020.08.07 |
[1차] 캐시(2018 카카오 블라인드 채용) (0) | 2020.08.06 |