어디까지 갈 수 있을까?
[문자열] 프로그래머스 방금그곡 본문
문제링크 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
'알고리즘 > 문제' 카테고리의 다른 글
[문자열] 프로그래머스 프렌즈4블록 (0) | 2021.05.06 |
---|---|
[문자열] 프로그래머스 압축 (0) | 2021.05.05 |
[해시] 프로그래머스 위장 (0) | 2021.05.03 |
[구현] 프로그래머스 자물쇠와 열쇠 (0) | 2021.05.01 |
[BFS] 백준 16236 아기상어 (0) | 2021.03.25 |
Comments