카카오 신입공채 3차 코딩테스트 문제4 방금그곡 JAVA


카카오 신입공채 3차 코딩테스트 문제4 방금그곡 JAVA


4번째 문제인 방금그곡 입니다.  문제에서 주어지는 조건에 맞게 음악에 대한 정보를 담는 String을 분석하여 어떤 곡인지 리턴하는 되는 문제 입니다.



입출력 형식과 테스트 케이스는 아래와 같습니다.



출처 : http://tech.kakao.com/2017/11/14/kakao-blind-recruitment-round-3/

방금그곡 JAVA 예제


카카오 신입공채 3차 코딩테스트 문제4번은 그리 어렵운 편은 아니였던 것 같습니다. 주어진 음계가 1분에 1개씩 재생된다는 점, 음계는 C#음표와 같은 2자리의 String도 1분에 재생된 점, 실제 곡의 길이보다 재생시간이 짧거나 길어질 수 있는 점만 고려하면 쉽게 풀 수 있었던 문제 였던 것 같습니다.


입력된 두 시간이 몇 분 차이나는지 계산하는 유틸성 함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
 * hh:mm 형식의 두 시간의 차를 분단위로 리턴
 * @param startTime
 * @param endTime
 * @return
 */
public static int getMin(String startTime, String endTime) {
    String[] arr;
    arr = startTime.split(":");
    int startMin = Integer.parseInt(arr[0]) * 60 + Integer.parseInt(arr[1]);
    
    arr = endTime.split(":");
    int endMin = Integer.parseInt(arr[0]) * 60 + Integer.parseInt(arr[1]);
    
    return Math.abs(endMin-startMin);
}
cs


실제 로직을 처리하고 결과를 리턴하는 메인함수

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
public static String findMusic(String m, String[] musicInfos) {
    ArrayList<String> matchMusic = new ArrayList<String>();
    
    // #문자와 혼동을 피하기 위해서 '대문자#'을 '소문자' 로 변경하여 스트링 비교
    m = m.replace("C#""c").replace("D#""d").replace("F#""f").replace("A#""a");
    
    for(String str : musicInfos) {
        String[] arr = str.split(",");
        
        int playLen = getMin(arr[0], arr[1]); // 실제 재생 분을 구함
        String orgPlayStr = arr[3]; // 원곡의 음표
        // #문자와 혼동을 피하기 위해서 '대문자#'을 '소문자' 로 변경하여 스트링 비교
        orgPlayStr = orgPlayStr.replace("C#""c").replace("D#""d").replace("F#""f").replace("A#""a");
        
        // 실제 재생된 음표를 구함 rearPlayStr
        int j = 0;
        String rearPlayStr = "";
        for(int i = 0; i < playLen ; i++) {
            j = i % orgPlayStr.length();
            rearPlayStr += orgPlayStr.charAt(j);
        }
        
        if(rearPlayStr.contains(m)) {
            matchMusic.add(str);
        }
    }
    
    // 조건에 맞는 음악이 여러개인 경우 재생시간이 긴곡, 재생시간도 같다면 먼저 입력된 곡
    Collections.sort(matchMusic, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            String arr[] = o1.split(",");
            int len1 = getMin(arr[0], arr[1]);
            int len2 = getMin(arr[0], arr[1]);
            return len2 - len1;
        }
    });
    
    return matchMusic.size() > 0 ? matchMusic.get(0).split(",")[2] : "(none)";
}
cs


이 글을 공유하기

댓글

Email by JB FACTORY