From ca641b730799bac5cf14d6bf748632d08fef1ce9 Mon Sep 17 00:00:00 2001 From: rl544 <111494264+rl544@users.noreply.github.com> Date: Thu, 2 Feb 2023 21:15:55 +0900 Subject: [PATCH] =?UTF-8?q?uploaded=20at=202023.=202.=202.=20=EC=98=A4?= =?UTF-8?q?=ED=9B=84=209:15:56?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programmers/[3차] 방금그곡/solution.java | 70 ++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 programmers/[3차] 방금그곡/solution.java diff --git a/programmers/[3차] 방금그곡/solution.java b/programmers/[3차] 방금그곡/solution.java new file mode 100644 index 0000000..5f978b8 --- /dev/null +++ b/programmers/[3차] 방금그곡/solution.java @@ -0,0 +1,70 @@ +// [문제 링크]: 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 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(){ + @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; + } +} \ No newline at end of file