프로그래머스 - 방금 그 곡

JIWOO YUN·2023년 4월 5일
0
post-custom-banner

문제링크

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

구현방법

총 음 -> 끝나는 시간 - 시작시간 -> HH :MM 이기때문에 -> HH 끼리 뺀 숫자 * 60을 MM끼리 뺀 값끼리 더해준다.

음악의 길이보다 긴경우 -> 그만큼 반복

A# => a로변환

D# => b로 변환

C# => c로 변환

F# = f 로변환

G# = g로 변환

주의점

-> 첫번째 곡부터 비교해서 진행

조건이 일치하는 것이 여러개일경우

  • 라디오에서 재생된 시간이 제일 긴 음악제목을 반환(음악이 나온시간도 체크 필요)
  • 재생된 시간도 같으면 먼저 입력된 음악제목 반환

쪼개서 문자열로 만들고

box[시작시간 , 끝나는시간 , 제목, 음]

앞의 두부분

String start[] = box[0].split(":");

String end[] = box[1].split(":");

int playtime = 위의 계산값

-> 분 먼저 계산

만약 찾고있는 음을 포함하고있는경우

  • checking => false 일경우 현재 존재하지않으므로 넣어둔다.

  • 그외에 음의 플레이타임이 길 경우 바꿔줌.

구현알고리즘


단순 구현


CODE

class Solution {
    public String solution(String m, String[] musicinfos) {
        String answer = "";
        musics check_music = new musics();

        //변환
        m = translate(m);
        for(int idx = 0; idx < musicinfos.length;idx++){
            //전부 분리
            String comment[] = musicinfos[idx].split(",");
            String start[] = comment[0].split(":");
            String end[] = comment[1].split(":");

            String Music_subject = comment[2];
            //변환
            String pitch = translate(comment[3]);

            //시간 체크
            int start_hour = Integer.parseInt(start[0]);
            int start_min = Integer.parseInt(start[1]);

            int end_hour = Integer.parseInt(end[0]);
            int end_min = Integer.parseInt(end[1]);

            if( end_min < start_min){
                end_hour -= 1;
                end_min+=60;
            }

            //플레이타임 체크
            int check_time = (end_hour - start_hour) *60 + (end_min - start_min);

            System.out.println("플레이타임 : " + check_time);
            String Music_pitch="";
            int Music_length = pitch.length();
            
            //음의 길이보다 작거나 같은 경우 자르기
            if(Music_length >= check_time){
                Music_pitch = pitch.substring(0,check_time);
            }
            //음 길이보다 긴 경우 자르기
            else {
                int per = check_time / Music_length;
                int div = check_time % Music_length;
                Music_pitch = pitch.repeat(per) + pitch.substring(0,div);
            }

            //음을 포함하고 있는 경우
            if(Music_pitch.contains(m))
            {
                //checking이 false인경우 없는 경우다.
                if(!check_music.checking){
                    check_music.checking = true;
                    check_music.playtime = check_time;
                    check_music.name = Music_subject;
                    continue;
                }
                //만약 플레이타임이 더 긴게 등장한경우 변경
                if(check_time > check_music.playtime){
                    check_music.playtime = check_time;
                    check_music.name = Music_subject;
                }
            }

        }
        //없는경우
        if(!check_music.checking)
            answer = "(None)";
        else
            answer = check_music.name;
        return answer;
    }

    //음악 저장용
    class musics{
        boolean checking = false;
        int playtime;
        String name;

    }

    //변환
    public String translate(String alpa){
        alpa = alpa.replace("A#" ,"a");
        alpa = alpa.replace("C#", "c");
        alpa = alpa.replace("D#","d");
        alpa = alpa.replace("F#","f");
        alpa = alpa.replace("G#","g");

        return alpa;
    }

}
profile
열심히하자
post-custom-banner

0개의 댓글