프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
1. 재생시간은 ( 끝나는 시간 - 시작 시간 ) 으로 분 단위로 계산.
2. 아래 사진의 조건을 만족시키기 위해 int maxPlayTime 변수 생성하여 비교

3. # 이 붙은 음표는 G 다음의 알파벳을 순서로 치환 ( ex. C# = H , D# = I .... ) , 소문자는 대문자로 모두 치환
4. 문자열 이어붙이기는 StringBuilder 을 이용
5. 재생시간과 비교하여 음표를 이어붙일때, 아래 공식을 사용하여 전체 악보를 먼저 붙인 후 , 남은 멜로디 하나씩 이어 붙임.
for (int j = 0; j < play / music.length; j++) {
sb.append(music[3]);
}
sb.append(music[3].substring(0, play % music[3].length()));
6. 2024 / 5 / 9 현 시점 34번 테스트 케이스에 문제 조건에 없는 B# 이라는 음표가 추가되어 문제를 검사하므로 필자는 B#도 추가로 치환하였음.
static String changeNote(String note) {
return note.replace("C#", "H")
.replace("D#", "I")
.replace("F#", "J")
.replace("G#", "K")
.replace("A#", "L")
.replace("B#", "M")
.toUpperCase();
}
나의풀이 ( 코드 )
class Solution {
public String solution(String m, String[] musicinfos) {
String answer = "";
int maxPlayTime = -1;
m = changeNote(m);
for (int i = 0; i < musicinfos.length; i++) {
String[] music = musicinfos[i].split(",");
music[3] = changeNote(music[3]);
String[] times = music[0].split(":");
int start = Integer.parseInt(times[0]) * 60 + Integer.parseInt(times[1]);
int end = 0;
times = music[1].split(":");
end = Integer.parseInt(times[0]) * 60 + Integer.parseInt(times[1]);
int play = end - start;
if (play > music[3].length()) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < play / music.length; j++) {
sb.append(music[3]);
}
sb.append(music[3].substring(0, play % music[3].length()));
music[3] = sb.toString();
} else {
music[3] = music[3].substring(0, play);
}
if (music[3].contains(m) && play > maxPlayTime) {
answer = music[2];
maxPlayTime = play;
}
}
if (answer == "") {
answer = "(None)";
}
return answer;
}
static String changeNote(String note) {
return note.replace("C#", "H")
.replace("D#", "I")
.replace("F#", "J")
.replace("G#", "K")
.replace("A#", "L")
.replace("B#", "M")
.toUpperCase();
}
}'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스/JAVA 자바] 무인도 여행 (2) | 2024.05.10 |
|---|---|
| [프로그래머스/JAVA 자바] 숫자 카드 나누기 (0) | 2024.05.10 |
| [프로그래머스/JAVA 자바] 배달 (2) | 2024.05.07 |
| [프로그래머스/JAVA 자바] 시소 짝꿍 (0) | 2024.05.02 |
| [프로그래머스/JAVA 자바] 폰켓몬 (0) | 2024.04.25 |