프로그래머스 level2)[3차] 방금그곡
방금그곡링크텍스트
이 문제에서 가장 중요한 것은
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;
}
}
Author And Source
이 문제에 관하여(프로그래머스 level2)[3차] 방금그곡), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yuiopre98/프로그래머스-level23차-방금그곡저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)