코딩 테스트/프로그래머스

프로그래머스 - 방금그곡 문제 (자바)

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

 

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

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

programmers.co.kr

1. #이 붙은 경우를 사용하지 않는 다른 문자로 치환

2. 재생 시간을 구하고 재생 시간 만큼의 재생된 음악 문자열을 만듬

3. 포함되면서 재생 시간이 긴 경우 answer 초기화

 

ps

만족하는 경우가 없으면 (None)을 리턴해줘야함.

 

// 프로그래머스 방금그곡 문제
class Solution {
    public String solution(String m, String[] musicinfos) {
        String answer = "(None)";
        int maxTime = 0;
        m = convert(m);
        for (String musicinfo : musicinfos) {
            String[] split = musicinfo.split(",");

            // 재생 시간
            int time = playTime(split[0], split[1]);

            // 재생 시간 동안 음악
            String fullMusic = FullMusicByPlayTime(convert(split[3]), time);

            // 기억하는 멜로디를 포함하고 재생 시간이 기존보다 긴 경우
            if (fullMusic.contains(m) && time > maxTime) {
                answer = split[2];
                maxTime = time;
            }
        }
        return answer;
    }

    // #이 붙은 경우 사용하지않는 다른 문자로 대체
    static String convert(String str) {
        return str.replace("C#", "c").replace("D#", "d")
                .replace("F#", "f").replace("G#", "g")
                .replace("A#", "a");
    }

    static int playTime(String startTime, String endTime) {
        String[] startTimeSplit = startTime.split(":");
        String[] endTimeSplit = endTime.split(":");
        return  (Integer.parseInt(endTimeSplit[0]) - Integer.parseInt(startTimeSplit[0])) * 60
                + (Integer.parseInt(endTimeSplit[1]) - Integer.parseInt(startTimeSplit[1]));
    }

    static String FullMusicByPlayTime(String music, int time) {
        if (music.length() >= time) {
            return music.substring(0, time);
        }

        StringBuilder temp = new StringBuilder();
        for (int i = 0; i <= time; i++) {
            temp.append(music.charAt(i % music.length()));
        }
        return temp.toString();
    }
}