https://school.programmers.co.kr/learn/courses/30/lessons/17683
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 포인트
문제가 엄청 길어서 쫄았지만, 단순한 구현 문제였다. 
1. 문자열로 주어진 시간을 분으로 환산
2. 한번에 StringBuilder 에 넣을수 있도록 음계를 C# -> c 이런식으로 모두 변환
3. sheet_music.charAt(j % sheet_music.length()) charAt의 인덱스를 저렇게 나머지를 통해 구함
4. 라디오에서 재생된 시간이 제일 긴 음악이 반환되도록 max_play_time 변수를 선언하여 최대값이 초기화 될때 answer 에 저장
class Solution {
    public String solution(String m, String[] musicinfos) {
        String answer = "(None)";
        int max_play_time = Integer.MIN_VALUE;
        for(int i = 0; i < musicinfos.length; i++){
            String tmp[] = musicinfos[i].split(",");
            StringBuilder sb = new StringBuilder();
            int start_time = cal_time(tmp[0]);
            int end_time = cal_time(tmp[1]);
            String music_title = tmp[2];
            String sheet_music = tmp[3];
            int play_time = end_time - start_time;
            // #이 붙은 음을 소문자 음으로 치환
            sheet_music = change_melody(sheet_music);
            // (재생시간 / 악보의 길이)를 나눴을 때 나오는 악보의 인덱스값을 append
            for(int j = 0; j < play_time ; j++) 
                sb = sb.append(sheet_music.charAt(j % sheet_music.length()));
            
            if(sb.toString().contains(change_melody(m))){
                // 조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환해야 하므로 max_play_time < play_time
                if(max_play_time < play_time){
                    max_play_time = play_time;
                    answer = music_title;
                }
            }
        }
        return answer;
    }
    public int cal_time(String time){
        String tmp[] = time.split(":");
        return Integer.parseInt(tmp[0]) * 60 + Integer.parseInt(tmp[1]);
    }
    public String change_melody(String str){
        str = str.replaceAll("A#","a");
        str = str.replaceAll("C#","c");
        str = str.replaceAll("D#","d");
        str = str.replaceAll("F#","f");
        str = str.replaceAll("G#","g");
        return str;
    }
}'프로그래밍 & IT > Algorithm' 카테고리의 다른 글
| [알고리즘] 알고리즘에서 자주 쓰는 조합(Combination) 문제 (1) | 2023.04.16 | 
|---|---|
| [알고리즘] 프로그래머스 괄호 변환 :: 우유 (0) | 2023.04.06 | 
| [알고리즘] 프로그래머스 네트워크:: 우유 (0) | 2023.04.04 | 
| [알고리즘] 프로그래머스 여행경로 :: 우유 (0) | 2023.04.03 | 
| [알고리즘] 프로그래머스 정수 삼각형 :: 우유 (0) | 2023.03.23 |