본문 바로가기
프로그래머스 C++

프로그래머스 방금 그 곡 C++

by Srff5123 2025. 2. 18.
728x90

 

문제 설명

라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금 할 때, 방금 그 곡 서비스를 이용한다.

자신이 기억한 멜로디를 가지고 방금 그 곡을 이용하여 음악을 찾는다

라디오에서는 한 음악을 반복해서 재생할 경우가 있어 기억하고 있는 멜로디가

끝부분과 처음 부분을 이어서 재생된 멜로디일 수도있다.

반대로 한 음악을 중간에 끊을 경우 원본 음악에는 내가 기억한 멜로디가 들어왔다고 해도 아닌 경우가 있다.

그렇기에 기억한 멜로디를 재생 시간과 악보를 직접 비교 할려고 한다

 

방금 그 곡에서는 음악 제목, 재생 시작 시간과, 끝난 시간, 악보를 제공하여 준다.

음은 CDEFGAB에 B를 제외하고 C# 이런식으로 #을 추가하여 총 12개로 이루어져 있다.

각 음은 1분에 1개씩 재생되며, 음악은 반드시 처음부터 재생되며 음악 길이보다 재생된 시간이 길 경우는

음악이 끊김 없이 처음부터 반복해서 재생되며,

음악 길이보다 재생된 시간이 짧을 경우에는 처음부터 재생 시간만큼 재생된다.

00:00을 넘겨서 재생되는 일은 없으며

조건에 일치하는 음악이 여러 개인 경우 라디오에서 재생된 시간이 가장 긴 음악 제목을 반환하여 준다.

만약 재생시간도 같다면 먼저 입력된 음악 제목을 리턴하고

일치하는 음악이 없는 경우 None을 반환하여 준다.

 

요약

멜로디 악보를 담은 문자열 m, 곡의 정보(시작 시간, 종료 시간, 음악 제목, 악보)를 담은 musicinfos가 매개변수로 주어짐

, 를 기준으로 시작시간, 종료시간, 음악제목, 악보 순으로 되어있기에 

getline을 통해 , 기준으로 4가지를 구해 벡터에 담아주고

종료시간 - 시작시간을 하여 음악이 진행된 시간을 구해준다.

방송에서 틀어준 악보를 구하기 위해 진행한 시간만큼 반복하여 악보의 첫번째 자리부터 시작해 악보를 생성해주고

 

if조건과 find함수를 통해 내가 기억하는 멜로디 m을 담고있는지를 확인 비교하여 곡을 찾고

if 조건을 통해 같은 음악이 여러개인 경우 가장 긴 음악을 선택하여 준다.

 

위의 조건에 해당되지 않는다면 처음 answer을 none으로 초기화 하고 시작했기에

리턴해주면 정답을 구할 수 있다.

 

728x90