λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 방금 그곑 (Python)

1. 문제 μ„€λͺ…

문제 링크

  • λ„€μ˜€κ°€ 듀은 μŒμ•…μ˜ 정보가 μ£Όμ–΄μ§ˆ λ•Œ, μŒμ•…μ˜ 제λͺ©μ„ κ΅¬ν•˜κΈ°
  • 각 μŒμ€ 1뢄에 1κ°œμ”© μž¬μƒ
  • 쑰건이 μΌμΉ˜ν•˜λŠ” μŒμ•…μ΄ μ—¬λŸ¬ 개일 λ•Œμ—λŠ” → μž¬μƒλœ μ‹œκ°„μ΄ 제일 κΈ΄ μŒμ•… 제λͺ©μ„ λ°˜ν™˜
  • μž¬μƒλœ μ‹œκ°„λ„ 같을 경우 → λ¨Όμ € μž…λ ₯된 μŒμ•… 제λͺ©μ„ λ°˜ν™˜
  • 쑰건이 μΌμΉ˜ν•˜λŠ” μŒμ•…μ΄ 없을 λ•Œμ—λŠ” “(None)”을 λ°˜ν™˜
  • μž…λ ₯
    • m : λ„€μ˜€κ°€ κΈ°μ–΅ν•œ λ©œλ‘œλ””λ₯Ό 담은 λ¬Έμžμ—΄
    • musicinfos : λ°©μ†‘λœ 곑의 정보λ₯Ό λ‹΄κ³  μžˆλŠ” λ°°μ—΄(μŒμ•…μ΄ μ‹œμž‘ν•œ μ‹œκ°, λλ‚œ μ‹œκ°, μŒμ•… 제λͺ©, 악보 정보)
  • 좜λ ₯
    • return : μ‹€μ œλ‘œ 듀은 μŒμ•…μ˜ 제λͺ©

2. μ½”λ“œ

def replace_code(str):
    str = str.replace("C#","c")
    str = str.replace("D#","d")
    str = str.replace("E#","e")
    str = str.replace("F#","f")
    str = str.replace("G#","g")
    str = str.replace("A#","a")
    return str

def play_time(start_time,end_time): #μž¬μƒμ‹œκ°„ κ³„μ‚°ν•˜λŠ” ν•¨μˆ˜
    start = start_time.split(":")
    end = end_time.split(":")
    play_time = 0
    play_time = (int(end[0]) - int(start[0])) * 60 + int(end[1]) - int(start[1])
    return play_time

#
def make_played_music_code(playtime, code):#μž¬μƒλœ μ½”λ“œ κ΅¬ν•˜κΈ°
    if len(code) > playtime: #μ½”λ“œκΈΈμ΄ > μ‹œκ°„
        code = code[:playtime]
    else:  #μ½”λ“œκΈΈμ΄ < μ‹œκ°„
        #μ‹œκ°„(14)  - 주어진 μ½”λ“œκΈΈμ΄(7) = 7 -> μ½”λ“œ[:7]
        q,r = divmod(playtime,len(code))
        code = code*q + code[:r]

    return code

def solution(m, musicinfos):
    music_dic = {}
    replaced_code = ""
    time = 0
    for _, music in enumerate(musicinfos):
        info = music.split(",")
        replaced_code = replace_code(info[3])
        time = play_time(info[0],info[1]) #play time κ΅¬ν•˜κΈ°
        music_dic[info[2]] = make_played_music_code(time,replaced_code) #곑이름, μž¬μƒλœ μ½”λ“œ

    answer = {}
    for key,item in music_dic.items():
        if replace_code(m) in item:
            answer[key] = len(item)

    if answer == {}:
        return "(None)"

    elif len(answer.keys()) ==1:
        for key in answer.keys():
            return key
    else:
        return max(answer,key=answer.get)

3. μ–΄λ €μ› λ˜ 점

쑰건이 μΌμΉ˜ν•˜λŠ” μŒμ•…μ΄ μ—¬λŸ¬ 개일 λ•Œμ—λŠ” λΌλ””μ˜€μ—μ„œ μž¬μƒλœ μ‹œκ°„μ΄ 제일 κΈ΄ μŒμ•… 제λͺ©μ„ λ°˜ν™˜ν•œλ‹€. μž¬μƒλœ μ‹œκ°„λ„ 같을 경우 λ¨Όμ € μž…λ ₯된 μŒμ•… 제λͺ©μ„ λ°˜ν™˜ν•œλ‹€.
쑰건이 μΌμΉ˜ν•˜λŠ” μŒμ•…μ΄ 없을 λ•Œμ—λŠ” “(None)”을 λ°˜ν™˜ν•œλ‹€.
  • μœ„μ˜ 쑰건듀을 μ΄ˆλ°˜μ— λ†“μΉ˜κ³  λ‹€λ₯Έ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ—μ„œ μ—λŸ¬κ°€ λ‚¬μ—ˆλŠ”λ°, λ‹€μŒλΆ€ν„°λŠ” λ†“μΉœ 쑰건듀이 μ—†λŠ”μ§€ 확인해야겠닀.
  • λ”•μ…”λ„ˆλ¦¬μ—μ„œ κ°€μž₯ 큰 valueλ₯Ό 가진 key 값을 찾을 λ•ŒλŠ” μ•„λž˜ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.getν•¨μˆ˜λŠ” μ„ μ–Έλœ dictμ—μ„œ 좜λ ₯ν•˜κ³ μž ν•˜λŠ” keyκ°€ 있으면, 그에 ν•΄λ‹Ήν•˜λŠ” valueλ₯Ό 좜λ ₯ν•΄μ€Œ
    • max(answer,key=answer.get)
  • μž¬μƒλœ 악보정보 ꡬ할 λ•Œ 쑰건 : μ½”λ“œκΈΈμ΄κ°€ μž¬μƒμ‹œκ°„λ³΄λ‹€ κΈΈλ©΄, μ½”λ“œκΈΈμ΄λ₯Ό μž¬μƒμ‹œκ°„λ§ŒνΌ 쀄이고, μ½”λ“œκΈΈμ΄κ°€ μž¬μƒμ‹œκ°„λ³΄λ‹€ 짧으면 μž¬μƒμ‹œκ°„μ— 맞좰 λ°˜λ³΅ν•œλ‹€.