어디까지 갈 수 있을까?

[문자열] 프로그래머스 방금그곡 본문

알고리즘/문제

[문자열] 프로그래머스 방금그곡

_Min 2021. 5. 4. 15:35

문제링크 programmers.co.kr/learn/courses/30/lessons/17683

 

 

 

[답코드]

def change(note):
    note=note.replace('C#','c')
    note=note.replace('D#','d')
    note=note.replace('F#','f')
    note=note.replace('G#','g')
    note=note.replace('A#','a')
    return note

def solution(m, musicinfos):
    arr=[] #[제목, 음표]
    m=change(m)

    for mm in musicinfos:
        start, end, title, sound=mm.split(',')
        sound=change(sound)
        
        start_hour, start_min, end_hour, end_min=map(int, start.split(':') + end.split(':'))
        length=(end_hour-start_hour)*60+(end_min-start_min)

        #길이 맞추기
        sound = sound*(length//len(sound))+sound[:length%len(sound)]
        
        arr.append([title, sound])
    
    arr.sort(key=lambda x:len(x[1]), reverse=True)
    
    for i in arr:
        if m in i[1]:
            return i[0]
        
    return "(None)"

 

 

 

[소감]

1차 시도 : C# 같이 # 붙은 친구들은 한 문자로 인식시키기 위해 다른 문자로 바꿔줘야 함 ex)C#->c(소문자)
2차 시도 : return "(None)" 주의
3차 시도 : 분만 고려하지 말고 시간도 고려해줘야 함
4차 시도 : arr 정렬할 때 그냥 정렬하면 오름차순으로 길이가 짧은 게 먼저 나옴, reverse=True 붙여주기

 

 

sort() 하면 오름차순으로 나온다는 것을 꼭 기억해야겠다. 그냥 sort()만 쓰고 어련히 나오겠거니~ 하고 있다가 틀렸다 ㅎ 이래서 테스트가 중요한가보다.

 

 

나는 잘 풀고 있다가도 항상 이게 최고가 아닐 것 같다는 생각이 들어 답을 참고하려고 하는데,

여태까지 그렇게 한 것들이 모두 다 나와 비슷한 방향으로 풀고 있었다. 그냥 이렇게 하는게 맞는지에 대한 확신이 필요했던 것 같다.

 

 

항상 최고는 아니여도 최선을 다해 후회를 두지 않는다는 마인드로 문제를 풀어야겠다.

728x90
Comments