프로그래머스 level2)[3차] 방금그곡

5026 단어 문자열문자열

방금그곡링크텍스트

이 문제에서 가장 중요한 것은

public static String check(String st) {
		st = st.replaceAll("A#", "a");
		st = st.replaceAll("C#", "c");
		st = st.replaceAll("D#", "d");
		st = st.replaceAll("F#", "f");
		st = st.replaceAll("G#", "g");
		return st;
	}

이 부분이다.
처음에 변환을 하지 않고 문자열 하나하나 비교하면서 해당 문자열이 있는 지를 확인했는데
이런식으로 하니까 재생시간대로 문자를 추가하는 부분에서 문제가 있었다.
1분에 음(문자열) 하나씩인데 C#같은 경우 음은 하나인데 문자열 길이는 2이다.
이거때문에 에러가 생겼다.

변환을 넣고, 문자열 contains 함수를 사용하니 통과 되었다.

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
> class Solution {
    static class Music implements Comparable<Music>{
		int id,playingtime;
		String title, sheet;

		Music(int id,int playingtime, String title, String sheet)
		{
			this.id = id;
			this.playingtime = playingtime;
			this.sheet = sheet;
			this.title = title;
		}

		@Override
		public int compareTo(Music m) {
			if (this.playingtime < m.playingtime) {
				return m.playingtime-this.playingtime;
			} else if(this.playingtime == m.playingtime) {
				if(this.id>m.id)
					return 1;
				else
					return -1;
			}
			else
				return -1;
		}
	}
	
    public static String check(String st) {
		st = st.replaceAll("A#", "a");
		st = st.replaceAll("C#", "c");
		st = st.replaceAll("D#", "d");
		st = st.replaceAll("F#", "f");
		st = st.replaceAll("G#", "g");
		return st;
	}
    public String solution(String m, String[] musicinfos) {
        	String answer = "(None)";
		m=check(m);
		ArrayList<Music> list = new ArrayList<Music>();
		for(int i=0; i<musicinfos.length;i++)
		{
			String[] temp = musicinfos[i].split(",");
			//재생시간 구하기
			String[] start_time= temp[0].split(":");
			String[] end_time=temp[1].split(":");

			int hour = Integer.parseInt(end_time[0])-Integer.parseInt(start_time[0]);
			int minute = Integer.parseInt(end_time[1])-Integer.parseInt(start_time[1]);
			list.add(new Music(i,(hour*60)+minute, temp[2], check(temp[3])));
		}
		ArrayList<Music> contain_list = new ArrayList<Music>();
		for(int i=0; i<list.size();i++)
		{
			StringBuilder builder = new StringBuilder();
			int sheet_len=list.get(i).sheet.length();
			int a =list.get(i).playingtime%sheet_len;
			int b = list.get(i).playingtime/sheet_len;
			for(int j=0; j<b; j++)
				builder.append(list.get(i).sheet);
			builder.append(list.get(i).sheet.substring(0, a));
            if(builder.toString().contains(m))
				contain_list.add(list.get(i));

		}
		Collections.sort(contain_list, new Comparator<Music>() {
			@Override
			public int compare(Music s1, Music s2) {
				return s1.compareTo(s2);
			}
		});
		if(contain_list.size()>0)
			answer  = contain_list.get(0).title;
        return answer;
    }
}

좋은 웹페이지 즐겨찾기