Level 2. 방금 그곡

방금 그곡

코딩테스트 연습 > 2018 KAKAO BLIND RECRUITMENT > 방금그곡

https://programmers.co.kr/learn/courses/30/lessons/17683



문제 구상

  • 입력: 알고있는 악보, "제목,시간,악보"로 구성된 원소 리스트
  • 구상:
    1. "악보"에 사용되는 원소의 길이가 2개인 경우(ex A# B# ...)인 경우 반복할 때 계산의 어려움이 있으므로, 해당 부분을 소문자로 변경하여 길이가 1인 원소로 변환하는 함수를 작성
    2. 입력된 리스트의 원소를 제목,시간,악보로 나눔
      1) 시간의 경우 시작 시간,시작 분, 끝 시간, 끝 분을 고려하여 정수형태로 변환
      2) 구해진 정수길이가 해당 원소의 악보의 길이보다 클 수 있으므로, 해당 부분을 고려하여 slicing
    3. slicing된 문자열에 입력된 알고있는 악보가 존재할 경우,
      1) 여러개일 경우 재생시간이 제일 긴 음악을 반환하기 위해 초기 리스트를 (제목,길이)로 한 뒤 if case 설정
      2) 없을 경우 (None)를 반환하기 위한 설정
    4. 3의 if case를 통해 구해진 리스트의 제목값을 출력

문제 풀이

#01
def transform(s):
    while '#' in s:
        s = s.replace(s[s.index('#')-1:s.index('#')+1],s[s.index('#')-1].lower())
    return s

def solution(m,musicinfos):
    m = transform(m)
#02    
    for music in musicinfos:
        start,end,title,melody = music.split(',') # Devide musicinfo
  #02-1
		start_h,start_m,end_h,end_m = map(int,start.split(':')+end.split(':'))
        time = 60*(end_h-start_h)+(end_m-start_m) # Calculate time
  #02-2        
        melody = (transform(melody)*time)[:time] # Set melody according to time length and transform
#03
    answer = ('(None)', None)
        if m in melody:
            if (answer[1] == None) or (time > answer[1]):
                answer = (title, time)
#04    
    return answer[0]
    
# Code test
m = "CC#BCC#BCC#BCC#B"
musicinfos = ["03:00,03:30,FOO,CC#B", "04:00,04:08,BAR,CC#BCC#BCC#B"]

solution(m,musicinfos)

좋은 웹페이지 즐겨찾기