![[Lv. 2 / 3차] 방금그곡 - undefined - 모든 영역 [Lv. 2 / 3차] 방금그곡 - undefined - 모든 영역](http://t1.daumcdn.net/tistory_admin/static/images/xBoxReplace_250.png)
import java.util.*;
class Solution {
public String solution(String m, String[] musicinfos) {
int maxPlayingTime = 0;
String answer = "";
// 네오가 기억한 멜로디 변환
m = changeMelody(m);
for (String musicInfo : musicinfos) {
String[] info = musicInfo.split(",");
// 재생 시간
int playingTime = (Integer.parseInt(info[1].substring(0, 2))
- Integer.parseInt(info[0].substring(0, 2)))*60
+ Integer.parseInt(info[1].substring(3))
- Integer.parseInt(info[0].substring(3));
// 악보 정보(=info[3]) #이 붙은 음 변환
info[3] = changeMelody(info[3]);
// 음악 길이 구하기
int musicLength = info[3].length();
// 실제 재생된 음악
String musicCode = "";
// 재생 시간 > 음악 길이 : 처음부터 음악 반복 재생
if (playingTime > musicLength) {
for (int j=0; j<playingTime/musicLength; j++) {musicCode += info[3];}
musicCode += info[3].substring(0, playingTime%musicLength);
}
// 재생 시간 <= 음악 길이 : 처음부터 재생된 시간만큼 재생
else {musicCode += info[3].substring(0, playingTime);}
// answer = 네오가 기억하는 멜로디 &&
// 제일 재생 시간이 긴 음악 제목(=info[2])
if (musicCode.contains(m) && playingTime > maxPlayingTime) {
answer = info[2];
maxPlayingTime = playingTime;
}
}
// 조건 일치 음악 X
if (maxPlayingTime == 0) { answer = "(None)"; }
return answer;
}
// #이 붙은 음을 변환
public static String changeMelody(String code) {
code = code.replaceAll("C#", "c");
code = code.replaceAll("D#", "d");
code = code.replaceAll("F#", "f");
code = code.replaceAll("G#", "g");
code = code.replaceAll("A#", "a");
return code;
}
}
- changeMelody로 '#'이 붙은 음을 변환 > replaceAll 메서드를 사용하여 각 음을 변환하고 변환된 음악 정보를 반환
- musicinfos 배열을 반복하면서 각 처리
- info 배열에 음악 정보를 쉼표로 분리해 저장
- playingTime 변수에 음악의 재생 시간을 분 단위로 계산
- info[3]에 있는 음악 정보를 변환
- musicLength에 음악의 길이 저장.
- musicCode에 실제 재생된 음악 저장
- playingTime이 음악 길이보다 큰 경우, 음악을 반복하여 재생하고 남은 부분을 추가. 그렇지 않은 경우 처음부터 재생된 시간만큼 음악을 저장
- musicCode에는 실제 재생된 음악이 저장, 이 음악이 m을 포함하고, playingTime이 현재까지의 최대 재생 시간인 maxPlayingTime보다 큰 경우, answer를 업데이트하고 maxPlayingTime을 갱신
- 조건에 만족하는 음악이 없다면 maxPlayingTime이 0이 되고, answer에 "(None)"
댓글