[프로그래머스] [LV2] [3차] 방금그곡
업데이트:
📚 [3차] 방금그곡
링크📎 : https://programmers.co.kr/learn/courses/30/lessons/17683
난이도 ⭐️⭐️
📖 문제
📝 내 풀이
import java.util.*;
class Solution {
public String solution(String m, String[] musicinfos) {
String answer = "";
LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
Queue<String> q = new LinkedList<String>();
m = m.replace("C#", "H").replace("D#", "I").replace("F#", "J").replace("G#", "K").replace("A#", "L");
for(int i = 0; i < musicinfos.length; i++){
musicinfos[i] = musicinfos[i].replace("C#", "H").replace("D#", "I").replace("F#", "J").replace("G#", "K").replace("A#", "L");;
String[] temp = musicinfos[i].split(",");
String[] len_stemp = (temp[0] + ":" + temp[1]).split(":");
int len = (Integer.parseInt(len_stemp[2]) - Integer.parseInt(len_stemp[0])) * 60 + (Integer.parseInt(len_stemp[3])- Integer.parseInt(len_stemp[1]));
if(temp[3].length() > len){
map.put(temp[2],temp[3].substring(0, len));
}
else{
int portion = len / temp[3].length();
int rest = len % temp[3].length();
map.put(temp[2],temp[3].repeat(portion) + temp[3].substring(0,rest));
}
}
for( String key : map.keySet() ){
if(map.get(key).contains(m)) q.offer(key);
}
if(q.isEmpty()) answer = "(None)";
else if(q.size() == 1) answer = q.poll();
else{
answer = q.poll();
while(!q.isEmpty()){
if(map.get(answer).length() < map.get(q.peek()).length()) answer = q.poll();
else q.poll();
}
}
return answer;
}
}
👊🏻 내 전략
- C# 같이 두 글자수를 먹는 경우는 처리하기 까다롭다.
- 미리 다른 문자로 치환하자
- Map의 Key-Value를 활용해서 문제를 풀어가자
- 단, Map은 순서가 보장안되므로, LinkedHashMap을 사용하
- 여러 후보가 있을 수 있으니 queue를 이용해서 넣어두고 나중에 비교하자.
끝-!
댓글남기기