[알고리즘/자바] 프로그래머스 방금그곡

문제링크 : https://programmers.co.kr/learn/courses/30/lessons/17683
체감 난이도 : 中

🤔풀이

메서드 설명

  1. trim(String m) : m에 대해서 #처리
  2. findAnswer(String str) : str에 대해 memory가 포함돼있으면 playT 비교하여 answer를 갱신
    • str은 해당 노래의 정보
    • str에서 재생시간인 playT(calculate 연산), 재생시간동안 들리는 가사인 fullLyric 를 계산
    • fullLyric에 memory가 포함돼있고, maxPlayT보다 크면 해당 노래 제목으로 answer 갱신
  3. calculateT(String[] start, String[] end) :

📃작성코드

public class PG방금그곡 {
	static String memory;	
	static String answer = "";
	static Integer maxPlayT = 0;
	public static String solution(String m, String[] musicinfos) {
		memory = trim(m); // # 처리된 기억 멜로디
		for (String musicinfo : musicinfos) {
			findAnswer(musicinfo);	// memory가 포함돼있으면 playT 비교한 후 answer 갱신
		}
		return answer.equals("") ? "(None)" : answer;	// answer가 초기값이면 answer가 없으므로 "(None)" 출력
	}

	private static String trim(String m) {
		return m.replaceAll("C#", "3")
				.replaceAll("D#", "4")
				.replaceAll("F#", "5")
				.replaceAll("G#", "6")
				.replaceAll("A#", "1");
	}

	private static void findAnswer(String str) {
		String[] split = str.split(",");

		Integer playT = calculateT(split[0].split(":"), split[1].split(":"));
		String name = split[2];

		String[] lyrics = trim(split[3]).split("");
		StringBuilder fullLyric = new StringBuilder("");

		for (int i = 0; i < playT; i++) {
			fullLyric.append(lyrics[i % lyrics.length]);
		}

		if (fullLyric.toString().contains(memory) && playT > maxPlayT) {
			answer = name;
			maxPlayT = playT;
		}
	}

	private static Integer calculateT(String[] start, String[] end) {
		Integer startT = Integer.parseInt(start[0]) * 60 + Integer.parseInt(start[1]);
		Integer endT = Integer.parseInt(end[0]) * 60 + Integer.parseInt(end[1]);
		return endT - startT;
	}
}

좋은 웹페이지 즐겨찾기