반응형
문제출처
https://programmers.co.kr/learn/courses/30/lessons/17683
문제풀이
문제에서 주어진 조건대로 문자열 처리를 하고 구현하면 되는 문제다. 여기서 핵심은 #이 붙은 문자 처리 방법이라고 생각한다. 본인은 #이붙은 문자를 convertSound(String m) 메서드를 통해 소문자로 치환한뒤 구현했다. 또한 나중에 악보를 생성할때를 생각해서 곡의 재생시간을 구할때 단위를 분으로 통일했다.
이 문제는 오해의 소지가 있다고 생각한다. 지문에서 `(None)`을 리턴한다고 했는데 실제로는 `(None)`이 아니라 (None)을 리턴해줘야 하기 때문이다.
소스코드
class Solution {
// #이 붙은 음을 소문자로 치환
private String convertSound(String m) {
m = m.replaceAll("C#", "c");
m = m.replaceAll("D#", "d");
m = m.replaceAll("F#", "f");
m = m.replaceAll("G#", "g");
m = m.replaceAll("A#", "a");
return m;
}
// 곡의 재생시간을 분으로 환산
private int getRunningTime(String startInfo, String endInfo) {
int runningTime = 0;
int startHour = Integer.parseInt(startInfo.split(":")[0]);
int startMinute = Integer.parseInt(startInfo.split(":")[1]);
int endHour = Integer.parseInt(endInfo.split(":")[0]);
int endMinute = Integer.parseInt(endInfo.split(":")[1]);
return (endHour - startHour) * 60 + (endMinute - startMinute);
}
// 재생 시간만큼 재생해 악보를 만듬
private String playMusic(String sound, int runningTime) {
StringBuilder sb = new StringBuilder();
int soundLength = sound.length();
for (int i=0; i<runningTime; i++) {
sb.append(sound.charAt(i % soundLength));
}
return sb.toString();
}
public String solution(String m, String[] musicinfos) {
String answer = "(None)";
m = convertSound(m);
int maxRunningTime = 0;
for (String info : musicinfos) {
String[] musicInfo = info.split(",");
int runningTime = getRunningTime(musicInfo[0], musicInfo[1]);
String musicName = musicInfo[2];
String sound = convertSound(musicInfo[3]);
// 곡 정보를 재생해서 만든 악보
String music = playMusic(sound, runningTime);
// 정보를 통해 만든 악보가 기억한 악보와 다르다면 제외
if (!music.contains(m)) continue;
// 악보가 같은경우 재생시간이 긴 제목을 반환
if (runningTime > maxRunningTime) {
answer = musicName;
maxRunningTime = runningTime;
}
}
return answer;
}
}
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스 1845] - 폰켓몬 (0) | 2020.05.28 |
---|---|
[프로그래머스 17686] - 카카오 파일명 정렬 (0) | 2020.05.28 |
[프로그래머스 12977] - 소수 만들기 (0) | 2020.05.26 |
[프로그래머스 43164] - 여행경로 (0) | 2020.05.25 |
[프로그래머스 62049] - 종이접기 (0) | 2020.05.25 |