‡ CODING TEST STUDY ‡/º 프로그래머스

[프로그래머스 | Java Lv.2] [3차] 방금그곡 (2018 KAKAO BLIND RECRUITMENT)

Trudy | 송연 2024. 9. 12. 02:49

문제

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

 

프로그래머스

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

programmers.co.kr

 


 

 

 

++ 34번 테스트케이스만 통과 안되는 경우 

 

B#은 주어지지 않았는데.. 34번 테스트 케이스에는 B#이 주어졌나보다 (이유는 모름)

밑에 추가해주면 통과 될 것임

code = code.replaceAll("B#", "b");

최종 코드 

 

package week18.baek;

import java.util.Arrays;

public class P17683 {
    public static String solution(String m, String[] musicinfos) {
        String answer = "(None)";
        int maxTime = -1;

        // 네오가 기억한 멜로디를 치환한다.
        m = changeCode(m);

        for (String info : musicinfos) {
            String[] parts = info.split(",");
            String start = parts[0];
            String end = parts[1];
            String title = parts[2];
            String music = changeCode(parts[3]);

            // 재생된 시간 계산
            int startHour = Integer.parseInt(start.split(":")[0]);
            int startMinute = Integer.parseInt(start.split(":")[1]);
            int endHour = Integer.parseInt(end.split(":")[0]);
            int endMinute = Integer.parseInt(end.split(":")[1]);
            int playingTime = (endHour - startHour) * 60 + (endMinute - startMinute);

            // 음악 문자열 생성
            StringBuilder musicCode = new StringBuilder();
            for (int j = 0; j < playingTime; j++) {
                musicCode.append(music.charAt(j % music.length()));
            }

            // 멜로디가 포함된 곡을 찾기
            if (musicCode.toString().contains(m)) {
                if (playingTime > maxTime) {
                    maxTime = playingTime;
                    answer = title;
                }
            }
        }

        return answer;
    }

    // #이 붙은 음을 치환하는 함수
    public static String changeCode(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");
        code = code.replaceAll("B#", "b");

        return code;
    }
    public static void main(String[] args) {
        String[] musicinfos = {"12:00,12:14,HELLO,CDEFGAB", "13:00,13:05,WORLD,ABCDEF"};
        System.out.println(solution("ABCDEFG", musicinfos));
    }
}

Reference

https://suebin-log.tistory.com/19

 

Programmers, [3차] 방금그곡 : Java

🔗 문제 링크 [3차] 방금그곡 🔎 문제 풀이 부분 문자열 비교를 묻는 문제이다. 재생 시간이 음악 길이보다 긴 경우는 음악이 끊김 없이 처음부터 반복해서 재생되고, 재생 시간이 음악 길이보

suebin-log.tistory.com