programmers_[3차] 방금그곡_java

2023. 4. 26. 11:35Algorithm/Programmers

728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {
    public String solution(String m, String[] musicinfos) {
        String answer = "(None)";
        int answerTime = -1;
        String startTime = "23:59";
        
        int musicInfosLength = musicinfos.length;        
        String melody = makeMusic(m);
        
        for(int i = 0; i<musicInfosLength; i++){
            String[] musicInfo = musicinfos[i].split(","); // 시작시간, 종료시간, 제목, 악보
            int timeDiff = calMin(musicInfo[0], musicInfo[1]); // 라디오에서 재생된 시간
            
            String music = makeMusic(musicInfo[3]);
            if(timeDiff < music.length()){ // 재생 시간 < 음악길이 -> 악보 자르기
               music = music.substring(0, timeDiff);
            }
            
            if(isContain(melody, music)){ // 적합한 경우
                if(timeDiff > answerTime){ // 재생시간이 길거나 먼저 나온 경우
                    answer = musicInfo[2];
                    answerTime = timeDiff;
                }
            }
        }
        
        return answer;
    }
    
    // 재생 시간 계산
    public int calMin(String startTime, String endTime){
        String[] t1Info = startTime.split(":");
        String[] t2Info = endTime.split(":");
        
        return (Integer.parseInt(t2Info[0]) - Integer.parseInt(t1Info[0])) * 60 + Integer.parseInt(t2Info[1]) - Integer.parseInt(t1Info[1]);
    }
    
    // #변환 
    public String makeMusic(String music){        
        StringBuilder sb = new StringBuilder();
        int musicLength = music.length();
       
        char[] musicArr = music.toCharArray();
        for(int i = 0; i<musicLength; i++){  
            if(i < musicLength-1 && musicArr[i+1] == '#'){ 
                sb.append(Character.toString(musicArr[i]).toLowerCase());
                i++;
            }else{
                sb.append(musicArr[i]);
            }
        }
        
        return sb.toString();
    }
    
    // 일치 여부 판단
    public boolean isContain(String m, String music){
        int mLength = m.length();
        int musicLength = music.length();
        
        boolean res = false;
        for(int i = 0; i< musicLength; i++){
            if(m.charAt(0) == music.charAt(i)){
                for(int j = 0; j < mLength; j++){
                    if(m.charAt(j) == music.charAt((i+j)%musicLength)){
                        res = true;
                    }else{
                        res = false;
                        break;
                    }
                }
            }
            
            if(res){
                return res;
            }
        }
        return res;
    }
}