📍 문제 설명
https://programmers.co.kr/learn/courses/30/lessons/17683
💡 접근
'#'이 붙은 음정들을 2분으로 인식되지 않도록 치환하는 작업과 시간이 같다는 보장이 없으니 시간을 분으로 치환해서 곡을 재생시켜서 재생된 멜로디를 만들어내는 작업이 중요했다.
👩💻 코드
import java.io.*;
import java.util.Arrays;
public class Solution {
public String solution(String m, String[] musicinfos) {
String answer = "(None)";
//#이 붙은 음이 2분으로 인식되지 않도록 하나의 글자로 치환
m = convertMelody(m);
//최대 재생 시간
int max = Integer.MIN_VALUE;
for(int i = 0; i < musicinfos.length; i++) {
String[] arr = musicinfos[i].split(",");
String start[] = arr[0].split(":");
String end[] = arr[1].split(":");
//시간을 분으로 변환
int hour = (Integer.parseInt(end[0]) - Integer.parseInt(start[0])) * 60;
int minute = Integer.parseInt(end[1]) - Integer.parseInt(start[1]);
int time = hour + minute;
String title = arr[2];
String score = convertMelody(arr[3]);
StringBuilder sb = new StringBuilder();
//재생 시간만큼 곡 재생시키기
for(int j = 0; j < time; j++) {
sb.append(score.charAt(j % score.length()));
}
//네오가 기억한 멜로디가 음악에 포함되어 있으면
if(sb.toString().contains(m)) {
//그 중 재생된 시간이 제일 긴 음악 제목 반환
//'>'로 하면 재생된 시간이 같을 경우 맨 처음 제목이 들어감
if(time > max) {
max = time;
answer = title;
}
}
}
System.out.println(answer);
return answer;
}
private String convertMelody(String m) {
m = m.replaceAll("C#", "c");
m = m.replaceAll("D#", "d");
m = m.replaceAll("F#", "f");
m = m.replaceAll("G#", "g");
m = m.replaceAll("A#", "a");
return m;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Solution s = new Solution();
String m = "ABCDEFG";
String[] musicinfos = {"12:00,12:14,HELLO,CDEFGAB", "13:00,13:05,WORLD,ABCDEF"};
s.solution(m, musicinfos);
}
}
'Algorithm > programmers' 카테고리의 다른 글
[2022 카카오 블라인드]k진수에서 소수 개수 구하기 (0) | 2022.05.03 |
---|---|
[2018 카카오 블라인드 3차]압축 (0) | 2022.04.14 |
[2018 카카오 블라인드 1차]캐시 (0) | 2022.04.12 |
[2018 카카오 블라인드 1차]프렌즈4블록 (0) | 2022.04.11 |
[2021 카카오 블라인드]순위 검색★ (0) | 2022.04.02 |