개발자 HOON
πŸ› HOON DEVLog
개발자 HOON
전체 방문자
였늘
μ–΄μ œ
  • 😎 전체 μΉ΄ν…Œκ³ λ¦¬ (137)
    • πŸ“ μ‹ μž… 인터뷰 μ€€λΉ„ (7)
    • πŸ¦” μ·¨μ—…μ€€λΉ„ 기둝 (7)
    • β˜• μžλ°” : JAVA (5)
    • 🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS (80)
    • 🌱 λ°±μ—”λ“œ : Backend (13)
    • πŸ§ͺ 컴퓨터과학 : CS (11)
    • πŸ—‚ λ°μ΄ν„°λ² μ΄μŠ€ : DB (1)
    • πŸƒ‍♂️ DEVLOG (8)
    • βš™οΈ Trouble Shooting (5)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • GitHub
  • Resume

곡지사항

인기 κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
개발자 HOON

πŸ› HOON DEVLog

🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS

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

2022. 10. 13. 10:55

🏝 문제 μ„€λͺ…

 

λΌλ””μ˜€λ₯Ό 자주 λ“£λŠ” λ„€μ˜€λŠ” λΌλ””μ˜€μ—μ„œ 방금 λ‚˜μ™”λ˜ μŒμ•…μ΄ 무슨 μŒμ•…μΈμ§€ κΆκΈˆν•΄μ§ˆ λ•Œκ°€ λ§Žλ‹€. 그럴 λ•Œ λ„€μ˜€λŠ” λ‹€μŒ ν¬ν„Έμ˜ '방금그곑' μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•˜κ³€ ν•œλ‹€. λ°©κΈˆκ·Έκ³‘μ—μ„œλŠ” TV, λΌλ””μ˜€ λ“±μ—μ„œ λ‚˜μ˜¨ μŒμ•…μ— κ΄€ν•΄ 제λͺ© λ“±μ˜ 정보λ₯Ό μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€μ΄λ‹€.

 

λ„€μ˜€λŠ” μžμ‹ μ΄ κΈ°μ–΅ν•œ λ©œλ‘œλ””λ₯Ό κ°€μ§€κ³  λ°©κΈˆκ·Έκ³‘μ„ μ΄μš©ν•΄ μŒμ•…μ„ μ°ΎλŠ”λ‹€. 그런데 λΌλ””μ˜€ λ°©μ†‘μ—μ„œλŠ” ν•œ μŒμ•…μ„ λ°˜λ³΅ν•΄μ„œ μž¬μƒν•  λ•Œλ„ μžˆμ–΄μ„œ λ„€μ˜€κ°€ κΈ°μ–΅ν•˜κ³  μžˆλŠ” λ©œλ‘œλ””λŠ” μŒμ•… 끝뢀뢄과 처음 뢀뢄이 μ΄μ–΄μ„œ μž¬μƒλœ λ©œλ‘œλ””μΌ μˆ˜λ„ μžˆλ‹€. λ°˜λŒ€λ‘œ, ν•œ μŒμ•…μ„ 쀑간에 λŠμ„ 경우 원본 μŒμ•…μ—λŠ” λ„€μ˜€κ°€ κΈ°μ–΅ν•œ λ©œλ‘œλ””κ°€ λ“€μ–΄μžˆλ‹€ 해도 κ·Έ 곑이 λ„€μ˜€κ°€ 듀은 곑이 아닐 μˆ˜λ„ μžˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— λ„€μ˜€λŠ” κΈ°μ–΅ν•œ λ©œλ‘œλ””λ₯Ό μž¬μƒ μ‹œκ°„κ³Ό 제곡된 악보λ₯Ό 직접 λ³΄λ©΄μ„œ λΉ„κ΅ν•˜λ €κ³  ν•œλ‹€. λ‹€μŒκ³Ό 같은 가정을 ν•  λ•Œ λ„€μ˜€κ°€ μ°ΎμœΌλ €λŠ” μŒμ•…μ˜ 제λͺ©μ„ κ΅¬ν•˜μ—¬λΌ.

 

  • 방금그곑 μ„œλΉ„μŠ€μ—μ„œλŠ” μŒμ•… 제λͺ©, μž¬μƒμ΄ μ‹œμž‘λ˜κ³  λλ‚œ μ‹œκ°, 악보λ₯Ό μ œκ³΅ν•œλ‹€.
  • λ„€μ˜€κ°€ κΈ°μ–΅ν•œ λ©œλ‘œλ””μ™€ 악보에 μ‚¬μš©λ˜λŠ” μŒμ€ C, C#, D, D#, E, F, F#, G, G#, A, A#, B 12κ°œμ΄λ‹€.
  • 각 μŒμ€ 1뢄에 1κ°œμ”© μž¬μƒλœλ‹€. μŒμ•…μ€ λ°˜λ“œμ‹œ μ²˜μŒλΆ€ν„° μž¬μƒλ˜λ©° μŒμ•… 길이보닀 μž¬μƒλœ μ‹œκ°„μ΄ κΈΈ λ•ŒλŠ” μŒμ•…μ΄ λŠκΉ€ 없이 μ²˜μŒλΆ€ν„° λ°˜λ³΅ν•΄μ„œ μž¬μƒλœλ‹€. μŒμ•… 길이보닀 μž¬μƒλœ μ‹œκ°„μ΄ 짧을 λ•ŒλŠ” μ²˜μŒλΆ€ν„° μž¬μƒ μ‹œκ°„λ§ŒνΌλ§Œ μž¬μƒλœλ‹€.
  • μŒμ•…μ΄ 00:00λ₯Ό λ„˜κ²¨μ„œκΉŒμ§€ μž¬μƒλ˜λŠ” 일은 μ—†λ‹€.
  • 쑰건이 μΌμΉ˜ν•˜λŠ” μŒμ•…μ΄ μ—¬λŸ¬ 개일 λ•Œμ—λŠ” λΌλ””μ˜€μ—μ„œ μž¬μƒλœ μ‹œκ°„μ΄ 제일 κΈ΄ μŒμ•… 제λͺ©μ„ λ°˜ν™˜ν•œλ‹€. μž¬μƒλœ μ‹œκ°„λ„ 같을 경우 λ¨Όμ € μž…λ ₯된 μŒμ•… 제λͺ©μ„ λ°˜ν™˜ν•œλ‹€.
  • 쑰건이 μΌμΉ˜ν•˜λŠ” μŒμ•…μ΄ 없을 λ•Œμ—λŠ” “(None)”을 λ°˜ν™˜ν•œλ‹€.

μž…λ ₯ ν˜•μ‹

μž…λ ₯으둜 λ„€μ˜€κ°€ κΈ°μ–΅ν•œ λ©œλ‘œλ””λ₯Ό 담은 λ¬Έμžμ—΄ mκ³Ό λ°©μ†‘λœ 곑의 정보λ₯Ό λ‹΄κ³  μžˆλŠ” λ°°μ—΄ musicinfosκ°€ μ£Όμ–΄μ§„λ‹€.

  • m은 음 1개 이상 1439개 μ΄ν•˜λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.
  • musicinfosλŠ” 100개 μ΄ν•˜μ˜ 곑 정보λ₯Ό λ‹΄κ³  μžˆλŠ” λ°°μ—΄λ‘œ, 각각의 곑 μ •λ³΄λŠ” μŒμ•…μ΄ μ‹œμž‘ν•œ μ‹œκ°, λλ‚œ μ‹œκ°, μŒμ•… 제λͺ©, 악보 정보가 ','둜 κ΅¬λΆ„λœ λ¬Έμžμ—΄μ΄λ‹€.
    • μŒμ•…μ˜ μ‹œμž‘ μ‹œκ°κ³Ό λλ‚œ μ‹œκ°μ€ 24μ‹œκ°„ HH:MM ν˜•식이닀.
    • μŒμ•… 제λͺ©μ€ ',' μ΄μ™Έμ˜ 좜λ ₯ κ°€λŠ₯ν•œ 문자둜 ν‘œν˜„λœ 길이 1 μ΄μƒ 64 μ΄ν•˜μ˜ λ¬Έμžμ—΄μ΄λ‹€.
    • 악보 μ •λ³΄λŠ” 음 1개 이상 1439개 μ΄ν•˜λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.

좜λ ₯ ν˜•μ‹

쑰건과 μΌμΉ˜ν•˜λŠ” μŒμ•… 제λͺ©μ„ 좜λ ₯ν•œλ‹€.


μž…μΆœλ ₯ μ˜ˆμ‹œ

"ABCDEFG" ["12:00,12:14,HELLO,CDEFGAB", "13:00,13:05,WORLD,ABCDEF"] "HELLO"
"CC#BCC#BCC#BCC#B" ["03:00,03:30,FOO,CC#B", "04:00,04:08,BAR,CC#BCC#BCC#B"] "FOO"
"ABC" ["12:00,12:14,HELLO,C#DEFGAB", "13:00,13:05,WORLD,ABCDEF"] "WORLD"

μ„€λͺ…

첫 번째 μ˜ˆμ‹œμ—μ„œ HELLOλŠ” 길이가 7λΆ„μ΄μ§€λ§Œ 12:00λΆ€ν„° 12:14κΉŒμ§€ μž¬μƒλ˜μ—ˆμœΌλ―€λ‘œ μ‹€μ œλ‘œ CDEFGABCDEFGAB둜 μž¬μƒλ˜μ—ˆκ³ , 이 쀑에 κΈ°μ–΅ν•œ λ©œλ‘œλ””μΈ ABCDEFGκ°€ λ“€μ–΄μžˆλ‹€.


μ„Έ 번째 μ˜ˆμ‹œμ—μ„œ HELLOλŠ” C#DEFGABC#DEFGAB둜, WORLDλŠ” ABCDE둜 μž¬μƒλ˜μ—ˆλ‹€. HELLO μ•ˆμ— μžˆλŠ” ABC#은 κΈ°μ–΅ν•œ λ©œλ‘œλ””μΈ ABC와 μΌμΉ˜ν•˜μ§€ μ•Šκ³ , WORLD μ•ˆμ— μžˆλŠ” ABCκ°€ κΈ°μ–΅ν•œ λ©œλ‘œλ””μ™€ μΌμΉ˜ν•œλ‹€.


 

🏝 풀이 μ½”λ“œ

def solution(m, musicinfos):
    answer = '(None)'
    candidate = []
    
    for index, info in enumerate(musicinfos):
        start, end, song, melody = info.split(',')
        a, b = map(int, start.split(':'))
        c, d = map(int, end.split(':'))
        playtime = c * 60 + d - a * 60 - b
        
        melody_list = list(melody)
        for idx, mel in enumerate(melody_list):
            if mel == '#':
                melody_list[idx-1] += '#'
        melody_list = [mel for mel in melody_list if mel != '#']
        
        length = len(melody_list)
        real = ''
        for i in range(playtime):
            idx = i % length
            real += melody_list[idx]
            
        if m in real:
            if real.count(m) > real.count(m+'#'):
                candidate.append([playtime, song, index])
    
    if candidate:
        candidate.sort(key=lambda x:(-x[0], x[2]))
        return candidate[0][1]
    else:
        return answer

 

μ „ν˜•μ μΈ κ΅¬ν˜„λ¬Έμ œμ΄λ‹€.

'#'에 λŒ€ν•œ μ²˜λ¦¬κ°€ μ€‘μš”ν•œλ°, #은 무쑰건 μ•Œλ°”λ²³ 뒀에 λΆ™λŠ”λ‹€.

λ“€μ–΄μ˜¨ 악보λ₯Ό list둜 λ§Œλ“€λ©΄ μ›μ†Œ ν•˜λ‚˜μ”© μͺΌκ°œμ§€κ²Œ λ˜λŠ”λ°, '#'만 남은 μ›μ†ŒλŠ” μ•žμ˜ μ›μ†Œ λ¬Έμžμ—΄μ— 더해주고, λ‚˜μ€‘μ— '#'을 λ¦¬μŠ€νŠΈμ—μ„œ μ œκ±°ν•΄μ£Όλ©΄ λœλ‹€.

 

κ·Έ ν›„, μŒμ•…μ€ μ—°μ†μž¬μƒλ˜λ―€λ‘œ ν”Œλ ˆμ΄νƒ€μž„λ§ŒνΌ λ°˜λ³΅μ‹œν‚¨λ‹€.

λ‚΄κ°€ λ“€μ—ˆλ˜ λ©œλ‘œλ””κ°€ ν”Œλ ˆμ΄νƒ€μž„λ§ŒνΌ λ°˜λ³΅μ‹œν‚¨ μŒμ•…μ— λ“€μ–΄μžˆλ‹€λ©΄ 후보에 μ˜¬λ¦°λ‹€.

μ£Όμ˜ν•  점은, 'ABC' in 'ABC#' κ³Ό 같은 κ²½μš°μ΄λ‹€. 이 쑰건은 Trueμ΄μ§€λ§Œ, Falseκ°€ λ‚˜μ˜€λ„λ‘ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

 

λ”°λΌμ„œ real.count(m) > real.count(m+'#')의 쑰건을 κ±Έμ–΄ μœ„μ™€ 같은 일을 λ°©μ§€μ‹œμΌ°λ‹€.

μ΅œμ’…μ μœΌλ‘œ ν”Œλ ˆμ΄νƒ€μž„μ΄ 높은 순으둜 μ •λ ¬, λ‹€μŒμœΌλ‘œ 곑 정보 λ°°μ—΄ μ•žμͺ½μ— μžˆλŠ” μˆœμ„œλŒ€λ‘œ 정렬을 μ‹œμΌœ

κ°€μž₯ μ•žμ˜ μ›μ†Œμ˜ song 정보λ₯Ό λ¦¬ν„΄ν•˜λ©΄ 정닡이닀.

 

ν›„λ³΄μžκ°€ μ—†μœΌλ©΄ '(None)'을 좜λ ₯ν•œλ‹€.

 

 

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ 동일쑰건 (μƒˆμ°½μ—΄λ¦Ό)

'🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 쀄 μ„œλŠ” 방법 (level2, python)  (1) 2022.10.13
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] κ°€μž₯ λ¨Ό λ…Έλ“œ (level3, python)  (0) 2022.10.13
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] ν–‰λ ¬ ν…Œλ‘λ¦¬ νšŒμ „ (level2, python)  (0) 2022.10.13
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] κ΄„ν˜Έ λ³€ν™˜ (level2, python)  (0) 2022.10.11
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 맀뉴 리뉴얼 (level2, python)  (0) 2022.10.10
    '🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] 쀄 μ„œλŠ” 방법 (level2, python)
    • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] κ°€μž₯ λ¨Ό λ…Έλ“œ (level3, python)
    • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] ν–‰λ ¬ ν…Œλ‘λ¦¬ νšŒμ „ (level2, python)
    • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] κ΄„ν˜Έ λ³€ν™˜ (level2, python)
    개발자 HOON
    개발자 HOON
    쒋은 λ°±μ—”λ“œ μ—”μ§€λ‹ˆμ–΄κ°€ 되기 μœ„ν•œ 기둝을 λͺ¨μ•˜μŠ΅λ‹ˆλ‹€. # μ£Όλ‹ˆμ–΄ # λ°±μ—”λ“œ # 개발자

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”