https://school.programmers.co.kr/learn/courses/30/lessons/17683
문제 포인트
문제가 엄청 길어서 쫄았지만, 단순한 구현 문제였다.
1. 문자열로 주어진 시간을 분으로 환산
2. 한번에 StringBuilder 에 넣을수 있도록 음계를 C# -> c 이런식으로 모두 변환
3. sheet_music.charAt(j % sheet_music.length()) charAt의 인덱스를 저렇게 나머지를 통해 구함
4. 라디오에서 재생된 시간이 제일 긴 음악이 반환되도록 max_play_time 변수를 선언하여 최대값이 초기화 될때 answer 에 저장
class Solution {
public String solution(String m, String[] musicinfos) {
String answer = "(None)";
int max_play_time = Integer.MIN_VALUE;
for(int i = 0; i < musicinfos.length; i++){
String tmp[] = musicinfos[i].split(",");
StringBuilder sb = new StringBuilder();
int start_time = cal_time(tmp[0]);
int end_time = cal_time(tmp[1]);
String music_title = tmp[2];
String sheet_music = tmp[3];
int play_time = end_time - start_time;
// #이 붙은 음을 소문자 음으로 치환
sheet_music = change_melody(sheet_music);
// (재생시간 / 악보의 길이)를 나눴을 때 나오는 악보의 인덱스값을 append
for(int j = 0; j < play_time ; j++)
sb = sb.append(sheet_music.charAt(j % sheet_music.length()));
if(sb.toString().contains(change_melody(m))){
// 조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환해야 하므로 max_play_time < play_time
if(max_play_time < play_time){
max_play_time = play_time;
answer = music_title;
}
}
}
return answer;
}
public int cal_time(String time){
String tmp[] = time.split(":");
return Integer.parseInt(tmp[0]) * 60 + Integer.parseInt(tmp[1]);
}
public String change_melody(String str){
str = str.replaceAll("A#","a");
str = str.replaceAll("C#","c");
str = str.replaceAll("D#","d");
str = str.replaceAll("F#","f");
str = str.replaceAll("G#","g");
return str;
}
}
'프로그래밍 & IT > Algorithm' 카테고리의 다른 글
[알고리즘] 알고리즘에서 자주 쓰는 조합(Combination) 문제 (1) | 2023.04.16 |
---|---|
[알고리즘] 프로그래머스 괄호 변환 :: 우유 (0) | 2023.04.06 |
[알고리즘] 프로그래머스 네트워크:: 우유 (0) | 2023.04.04 |
[알고리즘] 프로그래머스 여행경로 :: 우유 (0) | 2023.04.03 |
[알고리즘] 프로그래머스 정수 삼각형 :: 우유 (0) | 2023.03.23 |