프로그래밍 공방

[프로그래머스] 방금그곡 본문

개발/문제해결

[프로그래머스] 방금그곡

hyosupsong 2021. 2. 10. 20:01

문제

programmers.co.kr/learn/courses/30/lessons/17683

 

코딩테스트 연습 - [3차] 방금그곡

방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV,

programmers.co.kr

문제해결방법

처음에 주어진 멜로디 문자열 m과 musicinfos의 원소들에서 C#, D#, F#, G#, A# 를 겹치지 않는 다른 알파벳으로 바꿔준다.

각 음악의 시간을 계산해서 그 길이가 되도록 음악을 자르거나 반복해준다.

멜로디가 존재하는 음악들끼리 길이를 비교하여 가장 긴 음악의 제목을 반환해주고 같을 경우 먼저 나온 음악의 제목을 반환해준다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package Programmers;
 
public class Solution_방금그곡 {
    public static String changeMusic(String m) {
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<m.length(); i++) {
            int index = m.length()-i-1;
            char ch = ' ';
            if(m.charAt(index)=='#') {
                if(m.charAt(index-1)=='A') ch = 'L';
                else if(m.charAt(index-1)=='G') ch = 'K';
                else if(m.charAt(index-1)=='F') ch = 'J';
                else if(m.charAt(index-1)=='D') ch = 'I';
                else if(m.charAt(index-1)=='C') ch = 'H';
                i++;
            } else ch = m.charAt(index);
            sb.append(ch);
        }
        return sb.reverse().toString();
    }
    
    public static int getTime(String time) {
        String[] t = time.split(":");
        return Integer.parseInt(t[0])*60+Integer.parseInt(t[1]);
    }
 
    public static String solution(String m, String[] musicinfos) {
        String answer = "";
        int max = Integer.MIN_VALUE;
        m = changeMusic(m);
        for(int i=0; i<musicinfos.length; i++) {
            String[] s = musicinfos[i].split(",");
            int length = getTime(s[1]) - getTime(s[0]);
            String word = s[2];
            String music = changeMusic(s[3]);
            StringBuilder sb = new StringBuilder();
            for(int j=0; j<length; j++) {
                sb.append(music.charAt(j%music.length()));
            }
            music = sb.toString();
            if(music.contains(m) && max<length) {
                max = length;
                answer = word;
            }
        }
        return answer;
    }
    
    public static void main(String[] args) {
        String m = "ABC";
        String[] musicinfos = {"12:00,12:14,HELLO,C#DEFGAB""13:00,13:05,WORLD,ABCDEF"};
        System.out.println(solution(m, musicinfos));
    }
}
cs


코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.

'개발 > 문제해결' 카테고리의 다른 글

[백준] 1561번 : 놀이 공원  (0) 2021.02.10
[프로그래머스] 파일명 정렬  (0) 2021.02.10
[프로그래머스] 실패율  (0) 2021.02.10
[프로그래머스] 다트 게임  (0) 2021.02.10
[프로그래머스] 메뉴 리뉴얼  (0) 2021.02.08