728x90
https://school.programmers.co.kr/learn/courses/30/lessons/17683#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
생각보다 쉬웠던 문제.
풀이 : 30분
※ 접근법
1. 우선 C#, D#, F#, G#, A# 을 하나의 문자로 보기 위해 사용하지 않는 문자열로 치환해준다,
예시) dict_ = {"C#": "H", "D#": "I", "F#":"J", "G#":"K", "A#":"L"}
2. 제한 사항에 있는 조건들 확인.
- 1) 재생된 시간 계산
- 2) 재생된 시간이 제일 긴 조건 확인
- 3) 음악 길이보다 재생된 시간 길 때는 재생된 시간만큼 음악 반복 재생
- 4) 음악 길이보다 재생된 시간 짧을 때 처음부터 재생 길이만큼 짜르기
- 5) 조건이 일치하는 음악이 없을 때, "(None)" 반환.
파이썬 답
def solution(m, musicinfos):
answer = []
# 샵을 하나의 문자로 찾기 위한 치환
dict_ = {"C#": "H", "D#": "I", "F#":"J", "G#":"K", "A#":"L"}
# 문자 치환
for key, value in dict_.items():
m = m.replace(key,value)
for i, musicinfo in enumerate(musicinfos):
stime, etime, title, song = musicinfo.split(",")
# 문자 치환
for key, value in dict_.items():
song = song.replace(key,value)
# 재생 시간 계산
hour, minute = int(etime[:2]) - int(stime[:2]), int(etime[3:]) - int(stime[3:])
played_time = 60*hour + minute
# 재생된 시간이 음악 길이보다 길 때
if played_time > len(song):
song *= (played_time // len(song)) + 1
# 재생된 시간이 음악 길이보다 짧을 때
elif played_time < len(song):
song = song[:played_time]
# 후보 저장할 때 조건 정렬 위한 재생 시간, 순서 정보 저장
if m in song:
answer.append((title, played_time, i))
# 재생 시간 긴 순서대로 정렬 -x[1] , 노래 순서대로 정렬 x[2]
return_cand = sorted(answer, key = lambda x: (-x[1], x[2]))
# 빈 정렬이면 "(None)" return
return return_cand[0][0] if return_cand != [] else "(None)"
'Python > CoTe' 카테고리의 다른 글
[프로그래머스] level3 - 야근지수 파이썬 풀이 (0) | 2024.03.05 |
---|---|
PCCP 모의고사 1회 - 외톨이 알파벳 (파이썬 풀이) (0) | 2024.02.14 |
[프로그래머스] level2 스킬트리 - 파이썬 (0) | 2024.01.30 |
[프로그래머스] level2 할인 행상 - 파이썬 (0) | 2024.01.30 |
[프로그래머스] level2 - 두 큐 합 같게 만들기 (0) | 2024.01.25 |