카테고리 없음

[Lv. 2 / 3차] 방금그곡

녱녱 2023. 10. 16.

목차

[Lv. 2 / 3차] 방금그곡 - undefined - 모든 영역

import java.util.*;

class Solution {
    public String solution(String m, String[] musicinfos) {
        int maxPlayingTime = 0;
        String answer = "";
        
        // 네오가 기억한 멜로디 변환        
        m = changeMelody(m);
        
        for (String musicInfo : musicinfos) { 
        	String[] info = musicInfo.split(",");

        	// 재생 시간           
        	int playingTime = (Integer.parseInt(info[1].substring(0, 2)) 
            				- Integer.parseInt(info[0].substring(0, 2)))*60  
        				+ Integer.parseInt(info[1].substring(3)) 
                    			- Integer.parseInt(info[0].substring(3));
        	
        	// 악보 정보(=info[3]) #이 붙은 음 변환        	
        	info[3] = changeMelody(info[3]);
        	
        	// 음악 길이 구하기        	
        	int musicLength = info[3].length();
        	
        	// 실제 재생된 음악     	
        	String musicCode = "";
        	
        	// 재생 시간 > 음악 길이 : 처음부터 음악 반복 재생        	
        	if (playingTime > musicLength) {
        		for (int j=0; j<playingTime/musicLength; j++) {musicCode += info[3];}
        		musicCode += info[3].substring(0, playingTime%musicLength);
        	}
        	
        	// 재생 시간 <= 음악 길이 : 처음부터 재생된 시간만큼 재생
        	
        	else {musicCode += info[3].substring(0, playingTime);}
        	
            	// answer = 네오가 기억하는 멜로디 &&
            	// 제일 재생 시간이 긴 음악 제목(=info[2])            
        	if (musicCode.contains(m) && playingTime > maxPlayingTime) {
        		answer = info[2];
        		maxPlayingTime = playingTime;
        	}
        	
        }	
        
        // 조건 일치 음악 X     
        if (maxPlayingTime == 0) { answer = "(None)"; }
        
        return answer;
    }
    
    // #이 붙은 음을 변환    
    public static String changeMelody(String code) {
        code = code.replaceAll("C#", "c");
        code = code.replaceAll("D#", "d");
        code = code.replaceAll("F#", "f");
        code = code.replaceAll("G#", "g");
        code = code.replaceAll("A#", "a");
        
        return code;
    }
}
  1. changeMelody로  '#'이 붙은 음을 변환 > replaceAll 메서드를 사용하여 각 음을 변환하고 변환된 음악 정보를 반환
  2. musicinfos 배열을 반복하면서 각 처리
    • info 배열에 음악 정보를 쉼표로 분리해 저장
    • playingTime 변수에 음악의 재생 시간을 분 단위로 계산
    • info[3]에 있는 음악 정보를 변환
    • musicLength에 음악의 길이 저장.
    • musicCode에 실제 재생된 음악 저장
  3. playingTime이 음악 길이보다 큰 경우, 음악을 반복하여 재생하고 남은 부분을 추가. 그렇지 않은 경우 처음부터 재생된 시간만큼 음악을 저장
  4. musicCode에는 실제 재생된 음악이 저장, 이 음악이 m을 포함하고, playingTime이 현재까지의 최대 재생 시간인 maxPlayingTime보다 큰 경우, answer를 업데이트하고 maxPlayingTime을 갱신
  5. 조건에 만족하는 음악이 없다면 maxPlayingTime이 0이 되고, answer에 "(None)"

댓글