プログラマー(Java)-さっきの歌


質問リンク


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;
    }
}