https://school.programmers.co.kr/learn/courses/30/lessons/17683
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
어렵지 않아보여서 풀었었다!
코드 실행으로는 3개의 예제 모두 맞았는데 채점에서 다 틀렸다🤦♀️
답을 찾아보니 훨씬 효율적이고 깔끔하게 만든 코드가 있었다.
나도 깔끔하게 , 간단하게 코드를 만들고 싶다...
import math
def solution(m, musicinfos):
answer = None
m = m.replace("C#",'c').replace("D#",'d').replace("F#",'f').replace("G#",'g').replace("A#",'a')
for music in musicinfos :
start, end, title, code = music.split(',')
hour,minute = map(int,start.split(':'))
start = hour * 60 + minute
hour,minute = map(int,end.split(':'))
end = hour * 60 + minute
during = end - start
code = code.replace("C#",'c').replace("D#",'d').replace("F#",'f').replace("G#",'g').replace("A#",'a')
code *= math.ceil(during/len(code))
code = code[:during]
if m not in code :
continue
# 재생시간이 제일 긴, 먼저 입력된
if answer == None or answer[0] < during or (answer[0] == during and answer[1] > start) :
answer = (during, start,title)
if answer :
return answer[-1]
return "(None)"
C#과 같은 2글자를 1글자를 replace를 이용하여 치환한다.
m = m.replace("C#",'c').replace("D#",'d').replace("F#",'f').replace("G#",'g').replace("A#",'a')
이런 식으로 주르륵 .replace를 달면된다!!
musicinfos를 돌면서 각자 start, end, title, code 로 split한다.
code는 위 코드와 동일하게 #을 하나의 코드로 변경해준다.
이어 붙이는 부분을 나는 굉장히 더럽게 했는데 간단하게 할 수 있다.
math.ceil 을 이용해서 (지속시간 / 코드의 길이 )를 올림한 다음 해당 수만큼 * 하면 된다.
올림은 import math 해서 math.ceil 하면 된다.
그런 다음 리스트 슬라이싱을 이용해 지속 시간만큼 잘라준다.
만약 m 이 code에 포함되어있지 않다면 볼필요가 없고
문제에서 나온대로 재생시간이 제일 길고 ! 동일한 경우에는 먼저 입력된 값을 answer에 저장한다.
answer 에 값이 있다면 노래 이름을 반환한다.
없다면 "(None)"을 반환한다.
내 생각 ; 이 문제의 핵심 코드 :
1. 반복횟수만큼 * 해주기
code *= math.ceil(during/len(code))
2. #을 포함하여 하나의 문자로 만들기 위해 replace를 이용하기
code = code.replace("C#",'c').replace("D#",'d').replace("F#",'f').replace("G#",'g').replace("A#",'a')
참고 블로그 :
[프로그래머스] 방금그곡 #파이썬 #치환 #문자열 [2018 #KAKAO BLIND RECRUITMENT]
programmers.co.kr/learn/courses/30/lessons/17683# 코딩테스트 연습 - [3차] 방금그곡 방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는
roomedia.tistory.com
'알고리즘 > 프로그래머스문제풀이' 카테고리의 다른 글
[Python/프로그래머스]n진수게임_구현 (0) | 2022.10.20 |
---|---|
[Python/프로그래머스]압축_구현 (0) | 2022.10.20 |
[Python/프로그래머스]후보키_조합 (0) | 2022.10.19 |
[Python/프로그래머스]외벽점검_구현 (1) | 2022.10.15 |
[Python/프로그래머스]합승택시요금_플로이드와샬 (0) | 2022.10.15 |