관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[알고리즘] 프로그래머스 [3차] 방금그곡 (2018 KAKAO BLIND RECRUITMENT) -문자열, 구현- 자바 본문

알고리즘/문자열, 정렬

[알고리즘] 프로그래머스 [3차] 방금그곡 (2018 KAKAO BLIND RECRUITMENT) -문자열, 구현- 자바

막무가내막내 2021. 7. 7. 19:31
728x90

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

 

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

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

programmers.co.kr

 

 

프로그래머스 방금그곡 문제를 풀어봤습니다. ㅎㅎ

한 단어로 된 음 여러개로 이루어진 악보문장이 아니라 C# 과 같이 뒤에 #이 들어가 2개의 문자로 이루어져 있는 음인 경우 문자열에서 한개씩 불러와 음을 비교하기가 조금 까다로울 수 있습니다.

그래서 두단어로 이루어진 C#과 같은 음을 c로 치환을 하면 더 쉽게 문제를 풀 수 있습니다. (음도 총 12개로 정해져 있기 떄문에 가능합니다)

단순 문자열 파싱말고 전처리 후 파싱을 하면 더 쉽게 풀 수 있다는 점을 배운 문제였습니다. 

 

나머지 풀이는 주석으로 대체합니다.

 

[Java]

class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.solution("CC#BCC#BCC#BCC#B", new String[]{"03:00,03:30,FOO,CC#B", "04:00,04:08,BAR,CC#BCC#BCC#B"});
    }

    // C, C#, D, D#, E, F, F#, G, G#, A, A#, B -> 전체 음표
    public String solution(String m, String[] musicinfos) {
        String answer = "(None)";
        m = convert(m);
        int max = 0; // 최장재생시간
        for (int i = 0; i < musicinfos.length; i++) {
            String[] str = musicinfos[i].split(",");
            String title = str[2]; // 음악제목
            String music = convert(str[3]); // 악보
            String[] start = str[0].split(":"); // 시작시간
            String[] end = str[1].split(":"); // 종료시간
            int hour = (Integer.parseInt(end[0]) - Integer.parseInt(start[0])) * 60;
            int minute = Integer.parseInt(end[1]) - Integer.parseInt(start[1]);
            int time = hour + minute;
            StringBuilder sb = new StringBuilder(); // 재싱시간동안 재생된 전체멜로디
            for (int j = 0; j < time; j++) { // 전체멜로디 만들기
                sb.append(music.charAt(j % music.length()));
            }
            if (sb.toString().contains(m)) { // 기억한멜로디(방금그곡)이 전체멜로디에 들어있는지
                if (max < sb.toString().length()) { // 가장 긴 멜로디인 경우 정답 업데이트
                    max = sb.toString().length();
                    answer = title;
                }
            }
        }
        System.out.println(answer);
        return answer;
    }

    // 두글자(음표#) 한글자로 치환
    private String convert(String m) {
        m = m.replaceAll("A#", "a");
        m = m.replaceAll("C#", "c");
        m = m.replaceAll("D#", "d");
        m = m.replaceAll("F#", "f");
        m = m.replaceAll("G#", "g");
        return m;
    }
}

https://github.com/mtjin/algorithm_practice/commit/57095a258f21dad3fb59268cb93e68424e0ef270

 

프로그래머스 방금 그곡 풀이 · mtjin/algorithm_practice@57095a2

Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Showing 1 changed file with 45 additions and 0 deletions. +45 −0 프로그래머스 [3차] 방금그곡 (2018 KAKAO BLIND RECRUITM

github.com

 

 

3일동안은 잠시 코테를 쉬고 안드로이드 공부를 할 것 같습니다.

댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!

 

728x90
Comments