Files
Coding-Practice/programmers/[3차] 방금그곡/solution.java
T
2023-02-02 21:15:55 +09:00

70 lines
2.5 KiB
Java

// [문제 링크]: https://school.programmers.co.kr/learn/courses/30/lessons/17683
import java.util.*;
import java.lang.StringBuilder;
import java.util.Collections;
class Solution {
public String solution(String m, String[] musicinfos) {
ArrayList<Object[]> al = new ArrayList<>();
for(String mu : musicinfos){
String[] mi = mu.split(",");
if(match(m,mi)) {
al.add(new Object[] {mi[2],minDif(mi[0],mi[1])});
}
}
Collections.sort(al, new Comparator<Object[]>(){
@Override
public int compare(Object[] o1, Object[] o2){
return (int)o2[1]-(int)o1[1];
}
});
return (al.isEmpty())?"(None)":(String)al.get(0)[0];
}
public int minDif(String a, String b){
String[] ai = a.split(":"), bi = b.split(":");
int biH = Integer.parseInt(bi[0]), biM = Integer.parseInt(bi[1]), aiH = Integer.parseInt(ai[0]), aiM = Integer.parseInt(ai[1]);
// if(biM == 0 && biH == 0) biH = 24;
// if(aiM == 0 && aiH == 0) aiH = 24;
return (biH-aiH)*60+biM-aiM;
}
private boolean match(String m, String[] mi){
StringBuilder sb = new StringBuilder();
String title = mi[2], me = mi[3];
int len = minDif(mi[0],mi[1]), slen = me.length(), cnt = 0, alen, mmlen;
for(int a = 0; a < slen; a++) if(me.charAt(a) == '#') cnt++;
alen = slen - cnt; cnt = 0;
for(int a = 0; a < m.length(); a++) if(m.charAt(a) == '#') cnt++;
mmlen = m.length() - cnt;
int myPos = 0;
if(mmlen>len) return false;
if(len >= alen) {
//System.out.println(mmlen/alen);
for(int a = 0; a <= len/alen ; a++) { //mmlen/alen
sb.append(me);
//System.out.println(a+" append");
}
len -= alen*(len/alen);
}
// if(len < alen){
//System.out.println(len);
for(int a = 0; a < slen; a++){
if(me.charAt(a) != '#') myPos++;
if(myPos>=len) {
sb.append(me.substring(0,a+1));
myPos = 0;
break;
}
}
if(myPos>0)sb.append(me);
// }
String temp = sb.toString();
int firstChk = temp.indexOf(m), ar1Len = m.length();
//System.out.println(sb+" "+firstChk+" "+ar1Len);
if(firstChk + ar1Len == temp.length() || temp.matches(".*"+m+"[^\\#].*")) {
//System.out.println("matched");
return true;
}
return false;
}
}