떵호
seongho'Dev
떵호
전체 방문자
오늘
어제
  • 분류 전체보기 (116)
    • 회고 (2)
    • Algorithm (74)
      • 프로그래머스 (65)
      • 백준(BOJ) (2)
      • Note (7)
    • 기술독서 (25)
      • Clean Code (11)
      • 자바의 정석 (8)
      • 대규모 시스템 설계 기초 (6)
    • Computer Science (1)
      • Operating System (1)
    • Typescript (1)
    • JAVA (0)
    • Spring (6)
      • JPA (6)
    • AWS (2)
    • Git (2)
    • Etc (2)

블로그 메뉴

  • github

티스토리

태그

  • 코딩테스트 준비
  • JPA
  • 구현
  • Clean Code
  • 카카오 코테
  • 자바의 정석
  • 완전탐색
  • 프로그래머스
  • 알고리즘
  • 클린코드
hELLO · Designed By 정상우.
떵호

seongho'Dev

[Java] 프로그래머스 Lv2 - [3차] 방금 그 곡 (2018 KAKAO BLIND RECRUITMENT)
Algorithm/프로그래머스

[Java] 프로그래머스 Lv2 - [3차] 방금 그 곡 (2018 KAKAO BLIND RECRUITMENT)

2022. 5. 29. 21:35
728x90

🔗 문제링크

 

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

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

programmers.co.kr

💡 풀이

문자열 스플릿처리 한 후 문제를 해결하는 문제이다.

 

접근 방식

  • 음 코드를 분리하기 위해 'C#', 'D#, 'F#', 'G#', 'A#' 를 'c', 'd', 'f', 'g', 'a' 로 바꿔준다.
  • 재생 시간과 멜로디의 길이를 맞춰준다.
  • 재생 시간, 음악 제목, 멜로디 정보를 클래스 객체로 만들어 리스트에 저장한 후 재생 시간 내림차순으로 정렬한다.

💻 코드

import static java.lang.Integer.parseInt;

import java.util.*;

public class Solution {

    List<Info> list = new ArrayList<>();

    public String solution(String m, String[] musicinfos) {
        String answer = "(None)";

        m = codeReplace(m);

        for (String musicinfo : musicinfos) {
            String[] split = musicinfo.split(",");
            StringBuilder melody = new StringBuilder(codeReplace(split[3]));

            int runningTime = getRunningTime(split[0].split(":"), split[1].split(":"));

            if (runningTime >= melody.length()) {
                String origin = melody.toString();
                while (melody.length() != runningTime) {
                    if (melody.length() + origin.length() >= runningTime) {
                        int diff = runningTime - melody.length();
                        melody.append(melody.substring(0, diff));
                        continue;
                    }
                    melody.append(origin);
                }
                String substring = melody.substring(0, runningTime - melody.length());
                melody.append(substring);
            } else {
                melody = new StringBuilder(melody.substring(0, runningTime));
            }

            list.add(new Info(runningTime, split[2], melody.toString()));
        }

        Collections.sort(list);

        for (Info info : list) {
            if (info.melody.contains(m)) {
                answer = info.title;
                break;
            }
        }

        return answer;
    }

    private String codeReplace(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");
        return code;
    }

    private int getRunningTime(String[] start, String[] end) {
        int startTime = parseInt(start[0]) * 60 + parseInt(start[1]);
        int endTime = parseInt(end[0]) * 60 + parseInt(end[1]);

        return endTime - startTime;
    }

    private static class Info implements Comparable<Info>{

        int runningTime;
        String title;
        String melody;

        public Info(int runningTime, String title, String melody) {
            this.runningTime = runningTime;
            this.title = title;
            this.melody = melody;
        }

        @Override
        public int compareTo(Info info) {
            return info.runningTime - this.runningTime;
        }
    }
}

 

728x90
저작자표시 (새창열림)

'Algorithm > 프로그래머스' 카테고리의 다른 글

[Java] 프로그래머스 Lv2 - 2 x n 타일링  (0) 2022.05.31
[Java] 프로그래머스 Lv2 - 가장 큰 정사각형 찾기  (0) 2022.05.30
[Java] 프로그래머스 Lv2 - 방문 길이  (0) 2022.04.15
[Java] 프로그래머스 Lv2 - 스킬트리  (0) 2022.04.15
[Java] 프로그래머스 Lv2 - 쿼드압축 후 개수 세기  (1) 2022.04.13
    'Algorithm/프로그래머스' 카테고리의 다른 글
    • [Java] 프로그래머스 Lv2 - 2 x n 타일링
    • [Java] 프로그래머스 Lv2 - 가장 큰 정사각형 찾기
    • [Java] 프로그래머스 Lv2 - 방문 길이
    • [Java] 프로그래머스 Lv2 - 스킬트리
    떵호
    떵호

    티스토리툴바