728x90
SMALL
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def calculate_play_time(start, end):
start_h, start_m = map(int, start.split(':'))
end_h, end_m = map(int, end.split(':'))
return (end_h - start_h) * 60 + (end_m - start_m)
def convert_sharps(melody):
return (melody
.replace('A#', 'a')
.replace('B#', 'b')
.replace('C#', 'c')
.replace('D#', 'd')
.replace('F#', 'f')
.replace('G#', 'g'))
def get_full_melody(melody, play_time):
melody_length = len(melody)
full_melody = melody * (play_time // melody_length) + melody[:play_time % melody_length]
return full_melody
def solution(m, musicinfos):
m = convert_sharps(m)
answer = '(None)'
max_time = 0
for info in musicinfos:
start, end, title, melody = info.split(',')
play_time = calculate_play_time(start, end)
melody = convert_sharps(melody)
full_melody = get_full_melody(melody, play_time)
if m in full_melody and play_time > max_time:
max_time = play_time
answer = title
return answer
- 2018 KAKAO BLIND RECRUITMENT 문제 중 '방금그곡' 이라는 문제입니다.
- 중간에 곡이 재생된 총 시간을 계산하고 이 시간을 바탕으로 곡의 전체 멜로디를 파악해야하는 부분이 있습니다.
- 이 전체 멜로디를 파악하는 과정에서 'C#'과 같은 코드를 한 번에 처리해야하는데, 저는 인덱스로 접근도 해보고, 치환으로도 접근해 본 결과, 치환이 조금 더 용이하게 풀렸습니다.
왜 이렇게 풀었을까?
- calculate_play_time(start, end)은 재생 시작 시간과 종료 시간이 HH:MM 형식으로 되어있었기에 이 둘을 ':'을 기준으로 분리해주고, 그 후에 총 재생 시간을 분 단위로 계산해주는 과정이 필요해서 작성했습니다.
- get_full_melody(melody, play_time)는 재생 시간에 따라 멜로디를 줄여야할 때도 있고, 곡의 길이보다 총 재생 시간이 초과된다면 늘려주기도 해야했기에 작성되었습니다.
- 마지막에 정답을 찾는 과정에서 play_time > max_time 조건은 '조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다.'에 의거하여 추가되었습니다.
- 문제에는 'B#'에 대한 조건이 명시되어 있지 않은데, 테스트 케이스를 추가하면서 'B#'의 케이스도 추가된 것 같으니 유의하여 푸시면 되겠습니다!
728x90
LIST
'알고리즘 문제 > 프로그래머스 (Level 2)' 카테고리의 다른 글
📗 두 큐 합 같게 만들기 (4) | 2024.09.06 |
---|---|
📗 행렬 테두리 회전하기 (2) | 2024.09.05 |
📗 배달 (2) | 2024.08.12 |
📗 숫자 카드 나누기 (0) | 2024.08.05 |
📗 메뉴 리뉴얼 (0) | 2024.07.26 |