-
Notifications
You must be signed in to change notification settings - Fork 0
/
027_kakao_music.py
62 lines (48 loc) · 2.1 KB
/
027_kakao_music.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
## 문제 027. 방금 그 곡 --- 프로그래머스 Lv.2 연습 문제
def calc_time(start, end):
start_hour, start_min = int(start[:2]), int(start[3:])
start_time = (start_hour * 60) + start_min
end_hour, end_min = int(end[:2]), int(end[3:])
end_time = (end_hour * 60) + end_min
return end_time - start_time
def compose(total_time, melody):
melody_list = [melody[0]]
for a in range(1, len(melody)):
if melody[a] != "#": # 직전 문자 그대로인 경우
melody_list.append(melody[a])
else: # 직전 문자에 #이 붙는 경우
change = melody_list.pop().lower()
melody_list.append(change)
melody = "".join(melody_list)
if total_time < len(melody): # 멜로디를 잘라야 함
result = melody[:total_time]
elif total_time == len(melody): # 그대로 출력
result = melody
else: # 멜로디를 늘려야함
iteration = total_time // len(melody)
add = total_time % len(melody)
result = melody * iteration + melody[:add]
return result
def final_select(array):
array = sorted(array, key=lambda x: (-x[1], x[2]))
return array[0][0]
def solution(m, musicinfos):
answer = ''
crit_list = [m[0]]
for a in range(1, len(m)):
if m[a] != "#": # 직전 문자 그대로인 경우
crit_list.append(m[a])
else: # 직전 문자에 #이 붙는 경우
change = crit_list.pop().lower()
crit_list.append(change)
m = "".join(crit_list)
array = []
for idx, info in enumerate(musicinfos):
start, end, name, melody = info.split(",")
total_time = calc_time(start, end) # 총 재생 시간
total_music = compose(total_time, melody) # 총 재생 시간동안 흘러나온 음악
if m in total_music: array.append((name, total_time, idx))
if not array: answer = "(None)"
elif len(array) == 1: answer = array[0][0]
else: answer = final_select(array)
return answer