1. 문제 풀이 아이디어
- 재생 시간을 구하고 재생 시간만큼 문자열을 반복시킨 뒤, 특정 문자가 포함되어 있는지 비교하여 처리한다.
- 두 문자인 음은 한 문자로 변환하여 처리한다.
2. 나의 정답 코드
class Solution {
String[] sound = {"A#", "B#", "C#", "D#", "F#", "G#"};
public String solution(String m, String[] musicinfos) {
String answer = "(None)";
int max = 0;
for (int i = 0; i < sound.length; i++) {
m = m.replace(sound[i], String.valueOf(i));
}
for (String musicinfo : musicinfos) {
String[] split = musicinfo.split(",");
int time = time(split[1]) - time(split[0]);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < sound.length; i++) {
split[3] = split[3].replace(sound[i], String.valueOf(i));
}
while (stringBuilder.length() < time) {
stringBuilder.append(split[3]);
}
if (stringBuilder.substring(0, time).contains(m)) {
if (max < time) {
max = time;
answer = split[2];
}
}
}
return answer;
}
private int time(String time) {
String[] split = time.split(":");
return Integer.parseInt(split[0]) * 60 + Integer.parseInt(split[1]);
}
}
3. 정리
- 두 문자인 음을
sound
배열에 저장한다.
- 입력받은
m
에서 두 문자인 음을 한 문자로 변환한다.
musicinfos
배열을 순회하며 처리한다.- 문자열을 나눠 재생 시간을 계산한다.
- 악보에서 두 문자인 음을 한 문자로 변환한다.
stringBuilder
의 길이가 재생 시간보다 작으면 반복하여 악보를 추가한다.stringBuilder
에서0
부터time
까지의 문자열 중m
이 포함되어 있고, 저장된 재생 길이보다 클 경우max
와answer
를 갱신한다.
- 반복이 끝난 후
answer
를 반환하여 문제를 해결한다.
Share article