[프로그래머스][3차] 방금그곡
2020. 4. 14. 15:46ㆍ프로그래머스/카카오
import java.util.*;
class Solution {
class candidateSong{
int time;
int turn;
String name;
candidateSong(int time, int turn, String name){
this.time = time;
this.turn = turn;
this.name = name;
}
}
public String solution(String m, String[] musicinfos) {
String answer = "";
List<candidateSong> answerList = new ArrayList<>();
m = poundProcess(m);
for(int i=0; i<musicinfos.length; i++){
String[] songInfo = musicinfos[i].split(",");
String repeatString = poundProcess(songInfo[3]);
String compareString ="";
int repeatTime = getRepeatTime(songInfo[0],songInfo[1]);
for(int j=0; j<repeatTime; j++){
compareString
+= Character.toString(repeatString.charAt(j%repeatString.length()));
}
if(compareString.contains(m)){
answerList.add(new candidateSong(repeatTime,i,songInfo[2]));
}
}
Collections.sort(answerList,new Comparator<candidateSong>(){
public int compare(candidateSong s1, candidateSong s2){
if(s1.time!=s2.time){
return s2.time-s1.time;
}else{
return s1.turn-s2.turn;
}
}
});
if(answerList.isEmpty()){
answer = "(None)";
}else{
answer = answerList.get(0).name;
}
return answer;
}
private String poundProcess (String s){
String repeatString="";
for(int j=0; j<s.length(); j++){
if(s.charAt(j)=='#'){
if(s.charAt(j-1)=='A'){
repeatString = repeatString.substring(0,repeatString.length()-1);
repeatString += Character.toString('H');
}else if(s.charAt(j-1)=='C'){
repeatString = repeatString.substring(0,repeatString.length()-1);
repeatString += Character.toString('I');
}else if(s.charAt(j-1)=='D'){
repeatString = repeatString.substring(0,repeatString.length()-1);
repeatString += Character.toString('J');
}else if(s.charAt(j-1)=='F'){
repeatString = repeatString.substring(0,repeatString.length()-1);
repeatString += Character.toString('K');
}else{
repeatString = repeatString.substring(0,repeatString.length()-1);
repeatString += Character.toString('L');
}
}else{
repeatString += Character.toString(s.charAt(j));
}
}
return repeatString;
}
private int getRepeatTime(String start,String end){
String[] startTime = start.split(":");
String[] endTime = end.split(":");
int hour = Integer.parseInt(endTime[0]) - Integer.parseInt(startTime[0]);
int minute = Integer.parseInt(endTime[1]) - Integer.parseInt(startTime[1]);
return hour*60 + minute;
}
}
1. 우선 #이달려있는 악보를 새로운 문자 하나로 합쳐서 전체 악보를 바꿔주었다. > poundProcess 메소드
2. 음악이 흘러나온 총 시간을 getRepeatTime을 통해 구해준다.
3. 총 시간동안 반복된 전체 악보내용을 compareString으로 만들어주고, 그것이 사용자가 들은 악보를 포함하는지에 따라 answerList를 업데이트 하였다.
4. answerList를 주어진 조건에 맞게 정렬시켰다.
5. answerList가 비어있다면 (None)를, 비어있지않다면 리스트의 가장 첫번째 인덱스의 노래정보를 답에 저장하였다.
'프로그래머스 > 카카오' 카테고리의 다른 글
[프로그래머스] 후보 키 (0) | 2020.04.15 |
---|---|
[프로그래머스] [Level 4]무지의 먹방 라이브 (0) | 2020.04.14 |
[프로그래머스][1차] 캐시 (0) | 2020.04.13 |
[프로그래머스] 튜플 (0) | 2020.04.12 |
[프로그래머스][3차]파일명 정렬 (0) | 2020.04.09 |