_Han_
나의 개발 노트
_Han_
  • 분류 전체보기 (272)
    • 데이터 엔지니어링 (29)
    • 인프라 (3)
    • 추천시스템 (11)
    • 코딩테스트 (146)
    • 부트캠프 회고 (15)
    • 회고 (4)
    • 자격증 (1)
    • 파이썬 프로그래밍 (6)
    • 통계 (2)
    • Git (21)
    • 유니티2D (33)

최근 글

반응형
hELLO · Designed By 정상우.
_Han_

나의 개발 노트

[코딩테스트] 프로그래머스 [3차] 방금그곡 파이썬(Python)
코딩테스트

[코딩테스트] 프로그래머스 [3차] 방금그곡 파이썬(Python)

2023. 3. 23. 10:56
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/17683

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

from datetime import datetime
def solution(m, musicinfos):
    m = change(m)
    result = []
    for musicinfo in musicinfos:
        musicinfo = musicinfo.split(',')
        title = musicinfo[2]
        start_time = datetime.strptime(musicinfo[0], "%H:%M")
        end_time = datetime.strptime(musicinfo[1], "%H:%M")
        play_time= int((end_time - start_time).total_seconds() // 60)
        sounds = total_sound(play_time, musicinfo[3])
        
        if m in sounds:
            result.append([title, play_time])
            
    if len(result) == 0:
        return "(None)"
    else:
        result.sort(key=lambda x : x[1], reverse=True)
        result=[title for title, _ in result]
        return result[0]
    

    
def total_sound(play_time,sounds):
    sounds = change(sounds)
    q,r = divmod(play_time, len(sounds))
    sounds = (sounds * q) + sounds[:r]
    return sounds


def change(m):
    changes= {'A#':'a', 'C#':'c', 'D#':'d', 'F#':'f', 'G#':'g'}
    for sound in changes:
        m = m.replace(sound, changes[sound])

    return m

먼저 작성한 함수에 관하여 설명하겠습니다.

change(m):

입력으로 들어오는 문자열을 replace하는 함수입니다.

  • m : 'ABC'
  • sounds : 'ABC#'

이라면 네오가 기억한 멜로디 m이 sound에 들어있다고 판단할 수 있기 때문에


'A#':'a', 'C#':'c', 'D#':'d', 'F#':'f', 'G#':'g'

으로 '#'이 붙어있는 문자를 소문자로 변경해줍니다.

total_sound(play_time, sounds):

재생시간(play_time)을 이용하여 전체 음을 구하는 함수입니다.

전체 음을 구하기 전에 위에서 설명한 change함수를 이용해서 음을 바꾸어줍니다.

  • play_time : 11
  • sounds : 'ABCDE'

위의 경우에는 'ABCDEABCDEA'를 반환하게 됩니다.

  • play_time : 4
  • sounds : 'ABCDEF'

위의 경우에는 'ABCD'를 반환하게 됩니다.

solution

먼저 주어진 m을 change함수를 사용하여 음을 변경합니다.

 

musicinfos를 순회하면서 문자열로 이루어진 musicinfo를 ','을 기준으로 분리해줍니다.

 

datetime의 strptime 라이브러리와 첫번째([0]), 두번째([1]) 원소를 활용하여 play_time을 구해줍니다.

  • play_time은 재생시간을 의미하며 분으로 표현됩니다. 예를들어 [12:00, 14:00] 이라면 120으로 표현됩니다.

위에서 설명한 total_sounds함수를 이용하여 전체 음(sounds)을 구해주고 주어진 m이 sounds안에 존재한다면
result에 음악제목과 재생시간을 저장합니다.

 

마지막으로 result가 비어있다면 "(None)"을 반환하고
그렇지않다면 재생시간을 기준으로 내림차순 정렬한뒤에 가장 앞에 있는 제목을 반환합니다.

반응형

'코딩테스트' 카테고리의 다른 글

[코딩테스트] 백준 전화번호 목록 파이썬(Python)  (0) 2023.03.26
[코딩테스트] 프로그래머스 문자열 나누기 파이썬(Python)  (0) 2023.03.24
[코딩테스트] 프로그래머스 2개 이하로 다른 비트 파이썬(Python)  (0) 2023.03.22
[코딩테스트] 프로그래머스 숫자 변환하기 파이썬(Python)  (0) 2023.03.21
[코딩테스트] 프로그래머스 예상 대진표 파이썬(Python)  (1) 2023.03.20
    '코딩테스트' 카테고리의 다른 글
    • [코딩테스트] 백준 전화번호 목록 파이썬(Python)
    • [코딩테스트] 프로그래머스 문자열 나누기 파이썬(Python)
    • [코딩테스트] 프로그래머스 2개 이하로 다른 비트 파이썬(Python)
    • [코딩테스트] 프로그래머스 숫자 변환하기 파이썬(Python)
    _Han_
    _Han_
    학습한 것을 기록합니다.

    티스토리툴바