로직
1. 멜로디와 악보에 사용되는 음은 C, C#, D, D#, E, F, F#, G, G#, A, A#, B이다. 따라서 #이 붙은 음을 바꿔준다.'
각 음은 1분에 1개씩 재생되는 것이기 때문에 하나의 영어로 바꿔준다.
2. m과 info(악보)에서 음을 바꿔주고, 재생시간을 구해 재생시간과 악보의 길이를 맞춰준다.
3. 최종 악보에 m이 포함되어 있으면 temp에 넣고, 포함되어있지 않으면 temp에 넣지 않는다.
4. temp가 최종적으로 만들어졌으면,
- 조건이 일치하는 음악이 없을 때에는 "(None)"을 반환 (return None을 하는 바람에 실패했다.)
- 조건이 일치하는 여러 음악이 있으면 1) 재생시간 제일 긴 제목 2) 재생시간 같으면 먼저 입력된 음악 return
코드
주의할 점
1. 기존 : temp에 넣는 것은 [재생된 시간, name] -> 이렇게하면 재생시간이 같을 때 먼저 들어온 애를 뽑아내려면 for문을 돌려야하고
처음에는 index를 추가해야한다고 생각했다.
변경 : {} -> 악보 길이가 같을 때, 미리 있던 제목이 있으면 바꾸지 않고, 제목이 없으면 바꾼다.
2. 조건 일치하면 뽑아내야 하는 것을 처음에는 sort를 사용하려했는데, 그러면 먼저 들어오고를 판별하기 힘들 것 같다고 생각함.
3. ** 문제점 : 런타임에러
** 해결책 : 프로그래머스에서 temp = {} 일때 if len(temp) == 0: 이 조건으로 먼저 걸러주지 않으면 런타임에러가 뜬다.
4. 딕셔너리 비었는지 안비었는지 구분하는 것
ht = { ? ? ? }
if not ht:
print(?)
else:
print(??)
5. replace 사용법
infoinfo = infoinfo.replace('A#','H').replace('C#','I').replace('D#','J').replace('F#','K').replace('G#','L') 로 작성 가능
'알고리즘' 카테고리의 다른 글
[programmers] 조이스틱 (0) | 2020.09.15 |
---|---|
[programmers] 추석 트래픽 (0) | 2020.09.11 |
[programmers] N진수 게임 (0) | 2020.09.10 |
[programmers] 섬 연결하기 (0) | 2020.09.10 |
[programmers] 캐시 (0) | 2020.09.08 |