본문 바로가기

Algorithm

프로그래머스 2018 KAKAO BLIND 방금그곡 ( 문자열 ) JAVA

프로그래머스 2018 KAKAO BLIND  방금그곡 ( 문자열 ) JAVA


풀이

구현 문제이다.

 

핵심은 C#,F#과 같은 부분인데 이 부분은 예외처리를 쉽게 하기 위해

replaceAll을 이용하여 다른 값으로 바꿔줘서 해결했다.

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

 

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

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

programmers.co.kr

 

소스 코드


import java.util.*;


class Solution {
    public String solution(String m, String[] musicinfos) {
        String answer = "";
        int timeMax=0;
        for(int i=0;i<musicinfos.length;i++){
            String[] musicInfo = musicinfos[i].split(",");
            int playTime=getPlayTime(musicInfo[0],musicInfo[1]);
            StringBuilder sb = new StringBuilder();
            int idx=0;
            String ly = musicInfo[3];
            for(int j=0;j<playTime;j++){
                sb.append(ly.charAt(idx));
                idx++;
                if(idx<ly.length()){
                    if(ly.charAt(idx)=='#'){
                        sb.append(ly.charAt(idx));
                        idx++;
                    }
                }
                if(idx>=ly.length()){
                    idx=0;
                }
            }
            String music = sb.toString();
            m = m.replaceAll("C#","Q").replaceAll("D#","W").replaceAll("F#","R").replaceAll("G#","T").replaceAll("A#","U");
            music = music.replaceAll("C#","Q").replaceAll("D#","W").replaceAll("F#","R").replaceAll("G#","T").replaceAll("A#","U");
            if(music.contains(m)&&timeMax<playTime){
                answer=musicInfo[2];
                timeMax=playTime;
            }
        }
        
        if(answer.equals("")){
            answer = "(None)";
        }
        return answer;
    }
    public int getPlayTime(String s1,String s2){
        String[] t1 = s1.split(":");
        String[] t2 = s2.split(":");
        
        int time1 = Integer.parseInt(t1[0])*60 + Integer.parseInt(t1[1]);
        int time2 = Integer.parseInt(t2[0])*60 + Integer.parseInt(t2[1]);
        return time2-time1;
        
    }
}