Algorithm/programmers

[2018 카카오 블라인드 3차]방금그곡

마닐라 2022. 4. 13. 23:59

📍 문제 설명

https://programmers.co.kr/learn/courses/30/lessons/17683

 

코딩테스트 연습 - [3차] 방금그곡

방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,

programmers.co.kr

 

💡 접근

'#'이 붙은 음정들을 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);
    }
}