문제 설명
라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금 할 때, 방금 그 곡 서비스를 이용한다.
자신이 기억한 멜로디를 가지고 방금 그 곡을 이용하여 음악을 찾는다
라디오에서는 한 음악을 반복해서 재생할 경우가 있어 기억하고 있는 멜로디가
끝부분과 처음 부분을 이어서 재생된 멜로디일 수도있다.
반대로 한 음악을 중간에 끊을 경우 원본 음악에는 내가 기억한 멜로디가 들어왔다고 해도 아닌 경우가 있다.
그렇기에 기억한 멜로디를 재생 시간과 악보를 직접 비교 할려고 한다
방금 그 곡에서는 음악 제목, 재생 시작 시간과, 끝난 시간, 악보를 제공하여 준다.
음은 CDEFGAB에 B를 제외하고 C# 이런식으로 #을 추가하여 총 12개로 이루어져 있다.
각 음은 1분에 1개씩 재생되며, 음악은 반드시 처음부터 재생되며 음악 길이보다 재생된 시간이 길 경우는
음악이 끊김 없이 처음부터 반복해서 재생되며,
음악 길이보다 재생된 시간이 짧을 경우에는 처음부터 재생 시간만큼 재생된다.
00:00을 넘겨서 재생되는 일은 없으며
조건에 일치하는 음악이 여러 개인 경우 라디오에서 재생된 시간이 가장 긴 음악 제목을 반환하여 준다.
만약 재생시간도 같다면 먼저 입력된 음악 제목을 리턴하고
일치하는 음악이 없는 경우 None을 반환하여 준다.
요약
멜로디 악보를 담은 문자열 m, 곡의 정보(시작 시간, 종료 시간, 음악 제목, 악보)를 담은 musicinfos가 매개변수로 주어짐
, 를 기준으로 시작시간, 종료시간, 음악제목, 악보 순으로 되어있기에
getline을 통해 , 기준으로 4가지를 구해 벡터에 담아주고
종료시간 - 시작시간을 하여 음악이 진행된 시간을 구해준다.
방송에서 틀어준 악보를 구하기 위해 진행한 시간만큼 반복하여 악보의 첫번째 자리부터 시작해 악보를 생성해주고
if조건과 find함수를 통해 내가 기억하는 멜로디 m을 담고있는지를 확인 비교하여 곡을 찾고
if 조건을 통해 같은 음악이 여러개인 경우 가장 긴 음악을 선택하여 준다.
위의 조건에 해당되지 않는다면 처음 answer을 none으로 초기화 하고 시작했기에
리턴해주면 정답을 구할 수 있다.
'프로그래머스 C++' 카테고리의 다른 글
프로그래머스 징검다리 건너기 C++ (0) | 2025.02.20 |
---|---|
프로그래머스 무인도 여행 C++ (0) | 2025.02.19 |
프로그래머스 메뉴 리뉴얼 C++ (0) | 2025.02.17 |
프로그래머스 보석 쇼핑 C++ (0) | 2025.02.12 |
프로그래머스 배달 C++ (0) | 2025.02.11 |