티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/17683
풀이과정
1. 음악이 시작한 시각, 끝난 시각, 음악 제목, 악보 정보로 분리하기 -> ',' 구분자로 분리
2. 재생 시간 구하기
3. C#, D# 등 코드 소문자 알파벳으로 바꾸기 -> 함수로 작성 (replace_code())
3-1. 악보 정보 바꾸기 -> replace_code(악보 정보)
3-2. 네오가 기억한 멜로디(m) 바꾸기 -> replace_code(네오가 기억한 멜로디)
4. 재생 시간만큼의 코드 구하기
5. 네오가 기억한 멜로디(m)가 구한 코드에 포함되는지 확인
5-1. Python 풀이의 경우)
- 포함되면 새로운 배열에 제목과 시간을 저장
- 배열의 길이가 1이면 첫번째 인덱스의 제목 리턴
- 배열의 길이가 0이면 (None) 리턴
- 배열의 길이가 2 이상이면 재생 시간 순으로 정렬하고 첫번째 인덱스의 제목 리턴 (먼저 입력되는 순서대로 저장됐기 때문에 재생 시간 순으로만 정렬해도 상관없음)
5-2. Java 풀이의 경우)
- 최대 재생 시간 비교를 위한 변수 필요 -> max
- 포함되고 max보다 더 크면 answer 갱신
- 최종 answer이 빈 문자열이면 (None) 리턴
코드
1. Python
def solution(m, musicinfos):
answer = ''
result = []
for musicinfo in musicinfos:
info = musicinfo.split(',')
start = info[0].split(':')
end = info[1].split(':')
time = (int(end[0]) - int(start[0])) * 60 + int(end[1]) - int(start[1])
code = replace_code(info[3])
code = code * (time // len(code)) + code[:time%len(code)]
if replace_code(m) in code:
result.append([info[2], time])
if len(result) == 0:
return "(None)"
else:
result = sorted(result, key = lambda x: (-x[1]))
return result[0][0]
def replace_code(code):
code = code.replace('C#', 'c')
code = code.replace('D#', 'd')
code = code.replace('F#', 'f')
code = code.replace('G#', 'g')
code = code.replace('A#', 'a')
return code
2. Java
class Solution {
public String solution(String m, String[] musicinfos) {
String answer = "";
int max = 0;
for (String musicinfo: musicinfos) {
String[] info = musicinfo.split(",");
String[] start = info[0].split(":");
String[] end = info[1].split(":");
int time = (Integer.parseInt(end[0]) - Integer.parseInt(start[0])) * 60 + Integer.parseInt(end[1]) - Integer.parseInt(start[1]);
String replaced_code = replace_code(info[3]);
String code = "";
for (int i = 0; i < time / replaced_code.length(); i++)
code += replaced_code;
code += replaced_code.substring(0, time % replaced_code.length());
if (code.contains(replace_code(m))) {
if (max < time) {
max = time;
answer = info[2];
}
}
}
if (answer == "")
answer = "(None)";
return answer;
}
public String replace_code(String code) {
code = code.replaceAll("C#", "c");
code = code.replaceAll("D#", "d");
code = code.replaceAll("F#", "f");
code = code.replaceAll("G#", "g");
code = code.replaceAll("A#", "a");
return code;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 후보키 - Python (0) | 2021.11.26 |
---|---|
[프로그래머스] 헤비 유저가 소유한 장소 - MySQL (0) | 2021.11.25 |
[프로그래머스] 캐시 - Python (0) | 2021.08.19 |
[프로그래머스] 문자열 압축 - Python (0) | 2021.08.16 |
[프로그래머스] 위클리 챌린지 2주차 - Python (0) | 2021.08.14 |