코테/프로그래머스

[프로그래머스] 방금그곡 - Javascript

tony1724 2025. 8. 7. 17:54

문제 설명 : https://school.programmers.co.kr/learn/courses/30/lessons/17683#

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

문제 요약 :

  1. 라디오에서 특정시간 동안 같은 노래가 반복된다.
  2. 네오가 기억하고 있는 일부 가사(음)를 이용해 가장 적절한 노래 제목을 찾아라

 

문제 풀이 시간 :  1시간

문제 성공 여부 : 성공

 

접근 방법(성공) :

  1. 라디오에서 방영된 총 재생 시간을 분 단위로 계산한다
  2. 해당 시간동안 들리는 노래 가사(음)를 하나의 문자열(s)로 만든다.
  3. m(네오가 기억하고 있는 가사)를 s에 포함되어 있는지를 찾는다.
  4. 단, #이 포함된 가사(음)은 소문자 등으로 변환시켜줘야 한다.

 

전체 코드(성공) :

function solution(m, musicinfos) {
    let maxPlayTime = 0;
    let ans = "(None)"; // 없을 경우 (None)을 반환한다.
    m = convert(m); // A# -> a 와 같이 소문자로 변환해준다.
    
    for(const music of musicinfos){
        let [sTime, eTime, title, lyric] = music.split(",");
        lyric = convert(lyric); // 라디오 음의 #도 소문자로 변환해준다.
        
        const playTime = getPlayTime(sTime, eTime); // 총 재생 시간 계산
        
        const playLyric = getPlayLyric(playTime, lyric); // 전체 가사 반환
        
        if(!playLyric.includes(m)) continue; // 포함되지 않을 경우 패스
        
        // 라디오의 재생시간이 더 많을 경우 갱신
        if(maxPlayTime < playTime){
            maxPlayTime = playTime;
            ans = title;
        }
    }
    return ans;
}

// 정규식을 활용하여 (문자)# 형태를 소문자로 변환해준다.
const convert = (s) => {
    return s.replace(/(\w)#/g, (_,p)=> p.toLowerCase());
    
}

// 총 상영시간에 매칭되는 가사를 만든다.
const getPlayLyric = (playTime, lyric) => {
    let playLyric = "";
    
    for(let min=0; min<playTime; min++){
        playLyric += lyric[min % lyric.length];
    }
    
    return playLyric;
}

// 시작시간, 종료시간을 받고 상영시간을 반환한다.
const getPlayTime = (sTime, eTime) => {
    const [sHour, sMin] = sTime.split(":").map(Number);
    const [eHour, eMin] = eTime.split(":").map(Number);
    
    const playTime = (eHour * 60 + eMin) - (sHour * 60 + sMin);
    return playTime;
}

 

원래는 정규식 말고 노가다로 했었으나, 아래의 블로그를 참고하여 코드를 개선하였다

https://valur.tistory.com/entry/programmers-JavaScript-3%EC%B0%A8-%EB%B0%A9%EA%B8%88%EA%B7%B8%EA%B3%A1-17683

 

[프로그래머스] JavaScript Lv2 - [3차] 방금그곡(17683)

개요문제 이름: [3차] 방금그곡 (17683) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/17683플랫폼: 프로그래머스알고리즘 분류: 일반소요 시간: 7시간 문제 전문설명입출력  문제 풀이해

valur.tistory.com