https://school.programmers.co.kr/learn/courses/30/lessons/17683
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from datetime import datetime
def solution(m, musicinfos):
m = change(m)
result = []
for musicinfo in musicinfos:
musicinfo = musicinfo.split(',')
title = musicinfo[2]
start_time = datetime.strptime(musicinfo[0], "%H:%M")
end_time = datetime.strptime(musicinfo[1], "%H:%M")
play_time= int((end_time - start_time).total_seconds() // 60)
sounds = total_sound(play_time, musicinfo[3])
if m in sounds:
result.append([title, play_time])
if len(result) == 0:
return "(None)"
else:
result.sort(key=lambda x : x[1], reverse=True)
result=[title for title, _ in result]
return result[0]
def total_sound(play_time,sounds):
sounds = change(sounds)
q,r = divmod(play_time, len(sounds))
sounds = (sounds * q) + sounds[:r]
return sounds
def change(m):
changes= {'A#':'a', 'C#':'c', 'D#':'d', 'F#':'f', 'G#':'g'}
for sound in changes:
m = m.replace(sound, changes[sound])
return m
먼저 작성한 함수에 관하여 설명하겠습니다.
change(m):
입력으로 들어오는 문자열을 replace
하는 함수입니다.
m
: 'ABC'sounds
: 'ABC#'
이라면 네오가 기억한 멜로디 m
이 sound
에 들어있다고 판단할 수 있기 때문에
'A#':'a'
, 'C#':'c'
, 'D#':'d'
, 'F#':'f'
, 'G#':'g'
으로 '#'이 붙어있는 문자를 소문자로 변경해줍니다.
total_sound(play_time, sounds):
재생시간(play_time
)을 이용하여 전체 음을 구하는 함수입니다.
전체 음을 구하기 전에 위에서 설명한 change
함수를 이용해서 음을 바꾸어줍니다.
play_time
: 11sounds
: 'ABCDE'
위의 경우에는 'ABCDEABCDEA'를 반환하게 됩니다.
play_time
: 4sounds
: 'ABCDEF'
위의 경우에는 'ABCD'를 반환하게 됩니다.
solution
먼저 주어진 m
을 change
함수를 사용하여 음을 변경합니다.
musicinfos
를 순회하면서 문자열로 이루어진 musicinfo
를 ','
을 기준으로 분리해줍니다.
datetime
의 strptime
라이브러리와 첫번째([0]
), 두번째([1]
) 원소를 활용하여 play_time
을 구해줍니다.
play_time
은 재생시간을 의미하며 분으로 표현됩니다. 예를들어 [12:00, 14:00] 이라면 120으로 표현됩니다.
위에서 설명한 total_sounds
함수를 이용하여 전체 음(sounds
)을 구해주고 주어진 m
이 sounds
안에 존재한다면result
에 음악제목과 재생시간을 저장합니다.
마지막으로 result
가 비어있다면 "(None)"
을 반환하고
그렇지않다면 재생시간을 기준으로 내림차순 정렬한뒤에 가장 앞에 있는 제목을 반환합니다.
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 백준 전화번호 목록 파이썬(Python) (0) | 2023.03.26 |
---|---|
[코딩테스트] 프로그래머스 문자열 나누기 파이썬(Python) (0) | 2023.03.24 |
[코딩테스트] 프로그래머스 2개 이하로 다른 비트 파이썬(Python) (0) | 2023.03.22 |
[코딩테스트] 프로그래머스 숫자 변환하기 파이썬(Python) (0) | 2023.03.21 |
[코딩테스트] 프로그래머스 예상 대진표 파이썬(Python) (1) | 2023.03.20 |