[프로그래머스] 카카오_방금그곡 (자바 풀이)

문제

https://programmers.co.kr/learn/courses/30/lessons/17683?language=java# 

 

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

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

programmers.co.kr

풀이

문자열 파싱을 잘 하면 어렵지 않게 풀 수 있는 문제다. 아래와 같은 함수들을 작성해서 이용했다.

 

1. C# -> c, D# - >d 처럼 #이 붙은 문자열을 바꿔주는 함수

2. 12:00, 12:10 -> "10을 반환" 하는 것처럼 문자열에서 시간을 구하는 함수

 

자세한 내용은 코드를 참고하자.

코드

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
55
56
57
58
59
import java.util.* ;
 
class Solution {
    static HashMap<StringString> dict = new HashMap<>();  // 치환할 문자열 저장
    public String solution(String m, String[] musicinfos) {
        String answer = "(None)";
        
        dict.put("C#""c"); dict.put("D#""d"); dict.put("F#""f");
        dict.put("G#""g"); dict.put("A#""a");
        m = change(m);
        
        int maxTime = 0;
        for(int i=0; i<musicinfos.length; i++){
            String[] temp = musicinfos[i].split(",");
            int time = getTime(temp[0], temp[1]);
            String music = change(temp[3]);
            
            /* 재생시간만큼 music 반복 */
            while(music.length()<time){
                    music += music;
            }
            music = music.substring(0,time);
            
            /* 조건 일치 여부 확인 */
            if(music.contains(m)){
                if(maxTime < time){ // 재생 시간이 가장 긴 것을 정답으로
                    maxTime = time;
                    answer = temp[2];
                }
            }
            
        }
            
        return answer;
    }
    
    /* #이 붙은 문자열 치환 */
    static String change(String str){
        for(String key : dict.keySet()){
            str = str.replace(key, dict.get(key));
        }
        return str;
    }
    
    /* 재생시간 구하기 */
    static int getTime(String str1, String str2){
        String[] time1 = str1.split(":");
        String[] time2 = str2.split(":");
        
        int h1 = Integer.parseInt(time1[0])*60;
        int h2 = Integer.parseInt(time2[0])*60;
        
        int m1 = Integer.parseInt(time1[1]);
        int m2 = Integer.parseInt(time2[1]);
        
        return (h2+m2)-(h1+m1);
        
    }
}
cs

결과

반응형

댓글

Designed by JB FACTORY