Level 2. さっきの歌は


さっきの歌は


コードテスト練習>2018 KAKAO BLIND RECRUITMENT>さっきの曲
https://programmers.co.kr/learn/courses/30/lessons/17683

問題の構想


入力
  • :既知の楽譜、「タイトル、時間、楽譜」からなる要素リスト
  • 構想:
  • 「楽譜」で使われている要素の長さは2つあります(exA#B#...)もしそうであれば、計算を繰り返すときに困難に直面するため、関数の一部を小文字に変更し、長さが1の要素
  • に変換する関数を作成できます.
  • 入力リストの要素をタイトル、時間、楽譜に分けます
    1)開始時間、開始時間、終了時間、終了時間を考慮するために、時間を整数形式に変換します.
    2)求めた整数長は、要素の楽譜長よりも大きくなる可能性があるため、スライス
  • は、この部分を考慮すると、
  • スライス文字列に既知の楽譜が入力されている場合.
    1)複数ある場合は、初期リストを(タイトル、長さ)に設定して再生時間が最も長い音楽を返し、ifcaseを設定します
    2)
  • を設定して「なし」(None)を返します.
    取得リストのタイトル値
  • 3のifcase出力
  • を通過する.

    問題を解く

    #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)