class Solution {
public String solution(String m, String[] musicinfos) {
Queue<Node> queue = new PriorityQueue<>(Comparator.comparing((Node node) -> node.len,Comparator.reverseOrder())
.thenComparing(node -> node.start)
.thenComparing(node -> node.index));
m = change(m);
for (int i=0;i<musicinfos.length;i++) {
String[] music = musicinfos[i].split(",");
music[3] = change(music[3]);
int re = timeLogic(music[0],music[1]);
if (repeatStr(music[3],re,m)) {
queue.offer(new Node(re,music[0],i,music[2]));
}
}
return queue.isEmpty() ? "(None)" : queue.poll().musicName;
}
private String change(String strs) {
return strs.replace("C#","J")
.replace("D#","k")
.replace("F#","L")
.replace("G#","N")
.replace("A#","M");
}
private int timeLogic(String t1, String t2) {
String[] time1 = t1.split(":");
String[] time2 = t2.split(":");
return (Integer.parseInt(time2[0]) - Integer.parseInt(time1[0]) )*60 +
Integer.parseInt(time2[1]) - Integer.parseInt(time1[1]);
}
private boolean repeatStr(String str,int num,String m) {
return (str.repeat(num /str.length()) + str.substring(0,num % str.length())).contains(m);
}
static class Node {
int len;
String start;
int index;
String musicName;
public Node(int len, String start, int index,String musicName) {
this.len = len;
this.start = start;
this.index = index;
this.musicName = musicName;
}
}
}
Queue
를 선언해 줍니다.(Qeueu
를 선언하지 않고 그때그때 마다 비교해서 푸셔도 됩니다.)
우선순위큐
를 생성하는데 이 대Comparator.comparing
을 통해 문제의 조건들을 넣어줍니다.- 문제에서는 C#,D#등 #이 들어가 있는데 문제의 편의를 위해 위 값들을 편한 값으로 replace 해줍니다. (J,K...)
- musicInfo를
","
를 기준으로 분리해줍니다. 이 후 해당 값의 진행 시간을 계산 해주는데 저는 단순하게(시*60 + 분)
으로 계산하여서 둘의 차이를 구하였습니다.- 위에서 구한 값을 통해 어떠한 음악이 진행되었는지를 구합니다.
(str.repeat(num /str.length())
의 경우 해당 값이 곡 길이보다 긴 경우에는 해당 횟수 만큼 반복해서 넣어줍니다.str.substring(0,num % str.length())
를 통해 나머지 값(중간에 잘린 값)들을 더해줍니다. 이 값을 contains(m)을 이용하여 m의 값이 들어있는지를 반환해줍니다.- 위
if문
을 통과할 경우queue
에 넣어줍니다. 저는 Node라는 class를 만들어서 진행하였습니다.queue
가 비어있다면 "None"을 반환하고 그렇지 않다면 첫 번째 값을 반환해줍니다.
🤔위 repeatStr() 로직과 change() 로직의 아이디어를 생각해내셨다면 비교적 쉽게 푸실수 있었을 겁니다. 저의 경우 change()를 생각못해서 시간이 걸렸습니다.😭
출처 : 프로그래머스 - [3차 방금그곡]