๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐˜ผ๐™ก๐™œ๐™ค๐™ง๐™ž๐™ฉ๐™๐™ข/๐™‹๐™ง๐™ค๐™œ๐™ง๐™–๐™ข๐™ข๐™š๐™ง๐™จ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค '[3์ฐจ] ๋ฐฉ๊ธˆ๊ทธ๊ณก' ํŒŒ์ด์ฌ ํ’€์ด

by beomcoder 2023. 5. 18.
728x90
๋ฐ˜์‘ํ˜•
https://school.programmers.co.kr/learn/courses/30/lessons/17683
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

"""
๋ผ๋””์˜ค๋ฅผ ์ž์ฃผ ๋“ฃ๋Š” ๋„ค์˜ค๋Š” ๋ผ๋””์˜ค์—์„œ ๋ฐฉ๊ธˆ ๋‚˜์™”๋˜ ์Œ์•…์ด ๋ฌด์Šจ ์Œ์•…์ธ์ง€ ๊ถ๊ธˆํ•ด์งˆ ๋•Œ๊ฐ€ ๋งŽ๋‹ค.
๊ทธ๋Ÿด ๋•Œ ๋„ค์˜ค๋Š” ๋‹ค์Œ ํฌํ„ธ์˜ '๋ฐฉ๊ธˆ๊ทธ๊ณก' ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๊ณค ํ•œ๋‹ค. 
๋ฐฉ๊ธˆ๊ทธ๊ณก์—์„œ๋Š” TV, ๋ผ๋””์˜ค ๋“ฑ์—์„œ ๋‚˜์˜จ ์Œ์•…์— ๊ด€ํ•ด ์ œ๋ชฉ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์ด๋‹ค.

(ํ•˜๋žต)
"""

def solution(m, musicinfos):
    m = m.replace('A#','a').replace('C#','c').replace('D#','d').replace('F#','f').replace('G#','g')
    found = {'time': 0, 'name': '(None)'}
    
    for data in musicinfos:
        start, end, name, song = data.split(',')
        
        start_hour, start_min = map(int, start.split(':'))
        end_hour, end_min = map(int, end.split(':'))
        length = (end_hour-start_hour)*60 + (end_min-start_min)
        
        song = song.replace('A#','a').replace('C#','c').replace('D#','d').replace('F#','f').replace('G#','g')
        song = (song*max(1, int(length/len(song))+1))[:length]
        
        if m in song and found['time'] < length:
            found = {'time': length, 'name': name}
            
    return found['name']
    
"""
๋ฌธ์ œ๋ฅผ ๋ณด๋‹ˆ๊นŒ ๋ช‡๊ฐ€์ง€ ํŠน์ง•๋งŒ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ’€๋ฆด๊ฑฐ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด์—ˆ๋‹ค.

1. #์ด ๋ถ™์€ ์Œ์€ ํ•œ์Œ์œผ๋กœ ์ธ์‹ํ•ด์ฃผ๊ณ  ์žˆ๊ณ ,
2. ์‹œ๊ฐ„์ด ๋” ๊ธด ์Œ์•…, ๊ฐ™๋‹ค๋ฉด ๋จผ์ € ์ฐพ์€ ์Œ์•…์„ ์•Œ๋ ค์ค€๋‹ค.
3. ์›๊ณก์— ๋งž๋Š” ์Œ์ด ์žˆ์–ด๋„ ๋ฐฉ์†ก์— ๋‚˜์˜จ ์Œ๋“ค๋งŒ ์ƒ๊ฐํ•ด์•ผํ•œ๋‹ค.

๋จผ์ € #์ด ๋ถ™์€ ์Œ๋“ค์„ ์น˜ํ™˜์‹œ์ผœ์ฃผ์—ˆ๋‹ค. 
๊ทธ๋ฆฌ๊ณ  ์ฐพ์€์Œ์•…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์„ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์„ ์–ธํ•ด์ฃผ์—ˆ๋‹ค.

musicinfos๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค. (for๋ฌธ)
data๋Š” ,์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ์žˆ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ ,์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ค€๋‹ค.

์‹œ์ž‘์‹œ๊ฐ„๊ณผ ๋์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•ด ์Œ์ด ๋“ค๋ฆฐ ์ด ๊ธธ์ด๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
๋ฐฉ์†ก์—์„œ ๋“ค๋ฆฐ ์Œ์„ song์„ ํ†ตํ•ด ๊ตฌํ•œ๋‹ค.
song์€ ๋จผ์ € m๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ #์Œ์„ ์น˜ํ™˜์‹œ์ผœ์ฃผ๊ณ ,
๋ฐฉ์†ก์‹œ๊ฐ„์— ๋งž์ถฐ์„œ song์˜ ๊ธธ์ด๋ฅผ ๋Š˜๋ ค์ค€๋‹ค.

song = (song*max(1, int(length/len(song))+1))[:length]
์ด ๋ถ€๋ถ„ ์ •๋„๋งŒ ํ—ท๊ฐˆ๋ฆด ๊ฒƒ ๊ฐ™์€๋ฐ song์˜ ๊ธธ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์–ผ๋งˆ๋‚˜ ๋Š˜๋ ค์ค˜์•ผ ํ• ์ง€ ๊ณ ๋ฏผํ–ˆ๋‹ค.
(๋ฐฉ์†ก ๊ธธ์ด/song์˜ ๊ธธ์ด) + 1 ์„ ํ•œ๋‹ค๋ฉด ์–ด๋Š ๊ธธ์ด๊นŒ์ง€ ๋Š˜๋ ค์•ผ ํ•˜๋Š”์ง€ ๋‚˜์˜จ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 10๋ถ„์˜ ๋ฐฉ์†ก, 3๋ถ„์˜ song์ด๋ผ๋ฉด 10/3์€ 3.33 -> 3์ด ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด song*(3+1) = 12๋ถ„์˜ ๊ธธ์ด๊ฐ€ ๋œ๋‹ค.
max(1, ๊ธธ์ด)๋ฅผ ํ•ด์ค€ ์ด์œ ๋Š” ๋ฐฉ์†ก๊ธธ์ด๊ฐ€ song์˜ ๊ธธ์ด๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ์Œ์ˆ˜๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋ฐฉ์†ก๊ธธ์ด๊ฐ€ song์˜ ๊ธธ์ด๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ [:length]๋งŒํผ ์ž˜๋ผ์ฃผ์—ˆ๋‹ค.

์ „์ฒ˜๋ฆฌ๊ฐ€ ๋ชจ๋‘ ๋๋‚ฌ๋‹ค๋ฉด m์ด song์•ˆ์— ์žˆ๊ณ , ์ฐพ์€ ๋…ธ๋ž˜์˜ ๊ธธ์ด๋ณด๋‹ค ๋” ๊ธธ๋‹ค๋ฉด
์ƒˆ๋กœ์šด ๋…ธ๋ž˜๋ฅผ ์ฐพ์€๊ฒƒ์ด๋ฏ€๋กœ ์ฐพ์€๋…ธ๋ž˜๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์ค€๋‹ค.

if m in song and found['time'] < length ์—ฌ๊ธฐ์„œ <= ๊ฐ€ ์•„๋‹ˆ๋ผ < ์ธ ์ด์œ ๋Š”
๋…ธ๋ž˜๊ธธ์ด๊ฐ€ ๊ฐ™๋‹ค๋ฉด ๋จผ์ € ์ž…๋ ฅ๋œ ๋…ธ๋ž˜๊ฐ€ ์ •๋‹ต์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
"""
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€