[Programmers]-[3차] 방금그곡
문제
코드
import java.util.*;
class Solution {
public String solution(String m, String[] musicinfos) {
String answer = "";
int playTime = 0;//재생된 길이
String playedCode;//재생된 코드
ArrayList<String> correctMusic = new ArrayList<String>();
HashMap<String,Integer> correctMap = new HashMap<String,Integer>();
String[][] list = new String[musicinfos.length][4];
m += " ";
String musicName = "";
for(int j=0;j<m.length()-1;j++){//#구분하기위해 띄어쓰기로 구분
musicName += m.charAt(j);
if(m.charAt(j+1)=='#'){
musicName += "#";
j++;
}
musicName += " ";
}
for(int i=0;i<musicinfos.length;i++){
list[i] = musicinfos[i].split(",");//분할해 넣기
playedCode = "";
int startHour = Integer.parseInt(list[i][0].substring(0,2));
int endHour = Integer.parseInt(list[i][1].substring(0,2));
int startMinute = Integer.parseInt(list[i][0].substring(3,5));
int endMinute = Integer.parseInt(list[i][1].substring(3,5));
playTime = 60*(endHour-startHour)+(endMinute-startMinute);
//재생시간 공식
int count = 0;//실제 재생된 코드 길이 세기
int count_s = 0;//실제 재생된 코드 #개수 세기
while(count != playTime){//음악 코드를 순차적으로 재생된코드에 넣기
playedCode += list[i][3].charAt((count+count_s)%list[i][3].length());
count++;
if(list[i][3].charAt(((count+count_s)%list[i][3].length()))=='#'){//#이 나올경우
playedCode += "#";
count_s++;
}
playedCode += " ";
}
if(playedCode.contains(musicName)){//재생된 코드에 포함될 경우
correctMusic.add(list[i][2]);
correctMap.put(list[i][2], playTime);
}
}
int max = 0;
for(String key : correctMap.keySet()){//최대재생길이 찾기
if(max < correctMap.get(key))
max = correctMap.get(key);
}
int correctCount = 0;
for(String key : correctMap.keySet()){//최대재생길이 여러개 인지
if(max == correctMap.get(key)){
correctCount++;//이 수로 구분
answer = key;
}
}
if(correctCount > 1) return correctMusic.get(0);//여러개이면
else if(correctCount == 1) return answer;//하나이면
else return "(None)";//없으면
}
}
코드 설명
ArrayList에는 이름만 넣음.
HashMap은 이름과 재생시간을 넣음.
m값의 #을 띄어쓰기로 구분해 musicName에 재배열한다.
구분하기 편하게 list에 깔끔히 나눠준다.
playedCode에 (현재count수)%길이로 담는다. 그러면 길이를 넘어도 나머지값이된다.
count_s는 #의 갯수이다.
playedCode완성후 musicName과 비교한다.
마지막 if구문을 안해주면 분명 오류가 난다.
요약
- s.contains()로 포함 유무를 알 수있다.
for(String key : map.keySet())
으로 키, 값 알기.- iterator도 알아두면 좋다.