프로그래머스(Java)-[3차]방금그곡

민지킴·2021년 4월 15일
0

프로그래머스

목록 보기
12/42
post-thumbnail

문제 링크

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

문제 풀이

#이 들어간 음들은 replace를 사용하여 #까지 포함해서 한단어로 바꿔주었다.

String [] shop = {"C#","D#","F#","G#","A#"};
        for(int i=0; i<shop.length; i++){
            m=m.replace(shop[i],String.valueOf(i));
        }
       
         for(int j=0; j<shop.length; j++){
            musicinfo[3]=musicinfo[3].replace(shop[j],String.valueOf(j));   
        }

재생시간은 음악의 종료시간 - 시작시간인데 계산의 편의성을 위해 분으로 환산해서 계산했다.

 int playtime = Integer.parseInt(musicinfo[1].split(":")[0])*60+Integer.parseInt(musicinfo[1].split(":")[1]) - (Integer.parseInt(musicinfo[0].split(":")[0])*60+Integer.parseInt(musicinfo[0].split(":")[1]));

재생시간만큼은 멜로디가 계속 나와야 하므로
temp라는 변수에다가 재생시간동안 나오는 음들은 담아주었다.
이때 int idx = j%musicinfo[3].length(); 를 사용해서
재생시간보다 멜로디가 먼저 끝나도 처음부터 다시 담을수 있도록 했다.

            for(int j=0; j<playtime;j++){
                int idx = j%musicinfo[3].length();                
                temp+=musicinfo[3].substring(idx,idx+1);
            }

코드

import java.util.*;

class Solution {
    public String solution(String m, String[] musicinfos) {
        String answer = "";
        String [] shop = {"C#","D#","F#","G#","A#"};
        int savetime=0;
        for(int i=0; i<shop.length; i++){
            m=m.replace(shop[i],String.valueOf(i));
        }
        
        for(int i=0; i<musicinfos.length;i++){
            String [] musicinfo = musicinfos[i].split(",");
            String temp="";
            
            for(int j=0; j<shop.length; j++){
                musicinfo[3]=musicinfo[3].replace(shop[j],String.valueOf(j));   
            }
        int playtime = Integer.parseInt(musicinfo[1].split(":")[0])*60+Integer.parseInt(musicinfo[1].split(":")[1]) - (Integer.parseInt(musicinfo[0].split(":")[0])*60+Integer.parseInt(musicinfo[0].split(":")[1]));
            
            
            for(int j=0; j<playtime;j++){
                int idx = j%musicinfo[3].length();
                
                temp+=musicinfo[3].substring(idx,idx+1);
            }
    
            
            if(temp.contains(m)){
                if(answer.equals("")){
                    answer = musicinfo[2];
                    savetime= playtime;
                }else{
                    if(playtime>savetime){
                        answer=musicinfo[2];
                        savetime=playtime;
                    }
                }
            }
        }

            
        if("".equals(answer)){
            answer = "(None)";
        }
        return answer;
    }
}
profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글