programmers.co.kr/learn/courses/30/lessons/17683
1. #이 붙은 경우를 사용하지 않는 다른 문자로 치환
2. 재생 시간을 구하고 재생 시간 만큼의 재생된 음악 문자열을 만듬
3. 포함되면서 재생 시간이 긴 경우 answer 초기화
ps
만족하는 경우가 없으면 (None)을 리턴해줘야함.
// 프로그래머스 방금그곡 문제
class Solution {
public String solution(String m, String[] musicinfos) {
String answer = "(None)";
int maxTime = 0;
m = convert(m);
for (String musicinfo : musicinfos) {
String[] split = musicinfo.split(",");
// 재생 시간
int time = playTime(split[0], split[1]);
// 재생 시간 동안 음악
String fullMusic = FullMusicByPlayTime(convert(split[3]), time);
// 기억하는 멜로디를 포함하고 재생 시간이 기존보다 긴 경우
if (fullMusic.contains(m) && time > maxTime) {
answer = split[2];
maxTime = time;
}
}
return answer;
}
// #이 붙은 경우 사용하지않는 다른 문자로 대체
static String convert(String str) {
return str.replace("C#", "c").replace("D#", "d")
.replace("F#", "f").replace("G#", "g")
.replace("A#", "a");
}
static int playTime(String startTime, String endTime) {
String[] startTimeSplit = startTime.split(":");
String[] endTimeSplit = endTime.split(":");
return (Integer.parseInt(endTimeSplit[0]) - Integer.parseInt(startTimeSplit[0])) * 60
+ (Integer.parseInt(endTimeSplit[1]) - Integer.parseInt(startTimeSplit[1]));
}
static String FullMusicByPlayTime(String music, int time) {
if (music.length() >= time) {
return music.substring(0, time);
}
StringBuilder temp = new StringBuilder();
for (int i = 0; i <= time; i++) {
temp.append(music.charAt(i % music.length()));
}
return temp.toString();
}
}
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 삼각 달팽이 문제 (자바) (0) | 2021.05.31 |
---|---|
프로그래머스 - 예상 대진표 문제 (자바) (0) | 2021.05.31 |
프로그래머스 - 비밀지도 문제 (자바) (0) | 2021.05.07 |
프로그래머스 - 동굴 탐험 문제 (자바) (0) | 2021.05.07 |
프로그래머스 - 호텔 방 배정 문제 (자바) (0) | 2021.05.06 |