honey_pot
[python] 방금 그곡 본문
https://school.programmers.co.kr/learn/courses/30/lessons/17683
#이 붙은 음들을 어떻게 가려낼 것인가가 정말 떠오르지 않았던 문제다
처음엔 단순히 m in music 이런식으로 풀었는데 기본 테케는 통과하지만 제출 시 테케는 박살났다.
포인터로 하나하나 가리켜보나 이런 생각도 했지만 반나절 고민하고 힌트 구글링
그리고
- 조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다.
이 조건을 지킨다고 sort() 의 키에 첫번째로 재생된 시간, 두 번째로 실행된 노래 순서 인덱스를 주고 reverse=True 옵션을 안 줘서 한번 틀리고
reverse=True 옵션 주고 key lambda x : (1번,2번),reverse=True 이면 1번은 reverse=True로 2번은 reverse=False 로 풀어야 한다는 걸 캐치 못해서 또 틀리고
key lambda x : (1번,-2번),reverse=True 로 통과하고 나서야
내가 이미 2번째 조건에 해당하는 인덱스를 for 문에서 asc로 저장해서 굳이 key로 주지 않아도 됐다는 걸 깨달음
이 문제는 고개 절레절레 하는 대머리 아재 라인 임티 붙여야 함 문제 읽다가 고개를 흔들게 됨
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 | def replace(notes): # 뒤에 #이 붙는 음들을 모두 문제에서 입력되는 음정 데이터와 겹치지 않는 알파벳으로 치환하는 함수 for a,b in zip(["A#", "C#", "D#", "F#", "G#"], ["Z","Y","X","W","U"]): # zip 함수로 묶어 ("A#","Z")... 형태가 되도록 한다. notes = notes.replace(a,b) return notes def solution(m, musicinfos): music = [] # 필요한 데이터 가공해서 저장할 변수 titles = [] # 들어온 순서(인덱스 순서)로 음악 제목만 저장 for idx, info in enumerate(musicinfos): # 들어온 순서 저장하기 위해 enumerate로 인덱스도 같이 추출 start, end, title, notes = info.split(",") # 재생시각, 종료시각, 제목, 악보 elapsed = (int(end[:2]) * 60 + int(end[3:])) - (int(start[:2]) * 60 + int(start[3:])) # 시작, 종료 시간을 시간*60+분으로 계산하여 빼기 -> 실행시간 분으로 저장 notes = replace(notes) # #붙는 음들 전처리해서 저장 notes_whole = (elapsed//len(notes))*notes + notes[:elapsed%len(notes)] # 실행시간/악보 길이 == 전체 악보가 반복된 정도, 실행시간mod악보 길이 == 전체를 반복하지 못하고 남은 음들 music.append([notes_whole, elapsed, idx]) # 악보,재생길이,재생순서 저장 titles.append(title) # 들어온 순서대로 노래 제목 저장 answer = [] for ele in music: # ele = [notes_whole, elapsed, idx] if replace(m) in ele[0]: # 실행시간 만큼 반복한 악보에 replace() 처리한 m의 음정들이 있다면 answer.append([ele[1],ele[2]]) # answer에 재생시간, 인덱스 저장 if not answer: # 일치하는 악보가 없다면 return "(None)" else: # 일치하는 악보가 있다면 answer.sort(key=lambda x: x[0],reverse=True) # 1. 재생시간 Desc, 인덱스 Asc 정렬 # answer.sort(key=lambda x: (x[0],-x[1]),reverse=True) # 이미 15번째 line에서 asc 순서로 인덱스가 저장되어 정렬할 필요 없음(답은 같음) return titles[answer[0][1]] # 실행시간이 가장 긴 곡의 인덱스로 title을 인덱싱 | cs |
'문제 풀이' 카테고리의 다른 글
[python] n^2 배열 자르기 (0) | 2022.08.08 |
---|---|
[python] 예상 대진표 (0) | 2022.08.06 |
[Python] [3차] 파일명 정렬 (0) | 2022.08.03 |
[python] 주차 요금 계산 (0) | 2022.07.31 |
[Python] 올바른 괄호 (0) | 2022.07.14 |
Comments