[アルゴリズム/Java]プログラマーのさっきの歌


質問リンク:https://programmers.co.kr/learn/courses/30/lessons/17683
体感難易度:中

🤔に答える


メソッドの説明

  • トリム(String m):m#処理
  • findAnswer(String str):strにメモリが含まれている場合、playtを比較して答えをリフレッシュします.
  • strは曲の情報
  • strで再生時間Playt(計算演算)、再生時間で聞こえる歌詞fulllyric、計算
  • fullLyricはメモリを含み、maxPlayTより大きい場合は歌名で答え
  • をリフレッシュする.
  • calculateT(String[] start, String[] end) :
  • 📃合成コード

    public class PG방금그곡 {
    	static String memory;	
    	static String answer = "";
    	static Integer maxPlayT = 0;
    	public static String solution(String m, String[] musicinfos) {
    		memory = trim(m); // # 처리된 기억 멜로디
    		for (String musicinfo : musicinfos) {
    			findAnswer(musicinfo);	// memory가 포함돼있으면 playT 비교한 후 answer 갱신
    		}
    		return answer.equals("") ? "(None)" : answer;	// answer가 초기값이면 answer가 없으므로 "(None)" 출력
    	}
    
    	private static String trim(String m) {
    		return m.replaceAll("C#", "3")
    				.replaceAll("D#", "4")
    				.replaceAll("F#", "5")
    				.replaceAll("G#", "6")
    				.replaceAll("A#", "1");
    	}
    
    	private static void findAnswer(String str) {
    		String[] split = str.split(",");
    
    		Integer playT = calculateT(split[0].split(":"), split[1].split(":"));
    		String name = split[2];
    
    		String[] lyrics = trim(split[3]).split("");
    		StringBuilder fullLyric = new StringBuilder("");
    
    		for (int i = 0; i < playT; i++) {
    			fullLyric.append(lyrics[i % lyrics.length]);
    		}
    
    		if (fullLyric.toString().contains(memory) && playT > maxPlayT) {
    			answer = name;
    			maxPlayT = playT;
    		}
    	}
    
    	private static Integer calculateT(String[] start, String[] end) {
    		Integer startT = Integer.parseInt(start[0]) * 60 + Integer.parseInt(start[1]);
    		Integer endT = Integer.parseInt(end[0]) * 60 + Integer.parseInt(end[1]);
    		return endT - startT;
    	}
    }