728x90
🔗 문제링크
💡 풀이
문자열 스플릿처리 한 후 문제를 해결하는 문제이다.
접근 방식
- 음 코드를 분리하기 위해 'C#', 'D#, 'F#', 'G#', 'A#' 를 'c', 'd', 'f', 'g', 'a' 로 바꿔준다.
- 재생 시간과 멜로디의 길이를 맞춰준다.
- 재생 시간, 음악 제목, 멜로디 정보를 클래스 객체로 만들어 리스트에 저장한 후 재생 시간 내림차순으로 정렬한다.
💻 코드
import static java.lang.Integer.parseInt;
import java.util.*;
public class Solution {
List<Info> list = new ArrayList<>();
public String solution(String m, String[] musicinfos) {
String answer = "(None)";
m = codeReplace(m);
for (String musicinfo : musicinfos) {
String[] split = musicinfo.split(",");
StringBuilder melody = new StringBuilder(codeReplace(split[3]));
int runningTime = getRunningTime(split[0].split(":"), split[1].split(":"));
if (runningTime >= melody.length()) {
String origin = melody.toString();
while (melody.length() != runningTime) {
if (melody.length() + origin.length() >= runningTime) {
int diff = runningTime - melody.length();
melody.append(melody.substring(0, diff));
continue;
}
melody.append(origin);
}
String substring = melody.substring(0, runningTime - melody.length());
melody.append(substring);
} else {
melody = new StringBuilder(melody.substring(0, runningTime));
}
list.add(new Info(runningTime, split[2], melody.toString()));
}
Collections.sort(list);
for (Info info : list) {
if (info.melody.contains(m)) {
answer = info.title;
break;
}
}
return answer;
}
private String codeReplace(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;
}
private int getRunningTime(String[] start, String[] end) {
int startTime = parseInt(start[0]) * 60 + parseInt(start[1]);
int endTime = parseInt(end[0]) * 60 + parseInt(end[1]);
return endTime - startTime;
}
private static class Info implements Comparable<Info>{
int runningTime;
String title;
String melody;
public Info(int runningTime, String title, String melody) {
this.runningTime = runningTime;
this.title = title;
this.melody = melody;
}
@Override
public int compareTo(Info info) {
return info.runningTime - this.runningTime;
}
}
}
728x90
'Algorithm > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 Lv2 - 2 x n 타일링 (0) | 2022.05.31 |
---|---|
[Java] 프로그래머스 Lv2 - 가장 큰 정사각형 찾기 (0) | 2022.05.30 |
[Java] 프로그래머스 Lv2 - 방문 길이 (0) | 2022.04.15 |
[Java] 프로그래머스 Lv2 - 스킬트리 (0) | 2022.04.15 |
[Java] 프로그래머스 Lv2 - 쿼드압축 후 개수 세기 (0) | 2022.04.13 |