알고리즘 문제 풀기

프로그래머스: 광고 삽입 - javascript(시간 변환, 누적합)

Fo_rdang 2024. 6. 4. 17:31
반응형

문제 출처 

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

 

프로그래머스

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

programmers.co.kr

 

 

정답 풀이 코드 

function solution(play_time, adv_time, logs) {
   const pt = calculateTime(play_time); 
   const at = calculateTime(adv_time); 
   const times = new Array(pt+1).fill(0)
   
   logs.forEach((log) => {
       const [start, end] = log.split('-'); 
       const ws = calculateTime(start)
       const we = calculateTime(end)
       times[ws]++; 
       times[we]--; 
   }); 
    
    //해당 시간 
    for(let i=1; i<=pt; i++){
        times[i] += times[i-1]; 
    }
    
    //재생 시간의 누적 
    for(let i = 1; i <= pt; i++){
        times[i] += times[i-1]; 
    }
    
    let sum = times[at-1]
    let idx = 0; 
    
    for(let i=at-1; i<pt; i++){
        if(sum < times[i] - times[i-at]){
            sum = times[i] - times[i-at]; 
            idx = i - at + 1; 
        }
    }
    return formatterTime(idx)
    
    function calculateTime(time){
    const HHMMSS = time.split(':'); 
    const amount = HHMMSS[0] *3600 + HHMMSS[1] * 60 + HHMMSS[2] *1
    return amount 
}

function formatterTime(time){
    let HH = time / 3600 >> 0;    
    let MM = (time / 60 >> 0) % 60
    let SS = time % 60
    
    HH = HH > 9 ? HH : '0' + HH 
    MM = MM > 9 ? MM : '0' + MM
    SS = SS > 9 ? SS : '0' + SS
    
    return `${HH}:${MM}:${SS}`
}
}

 

 

내 풀이 코드

function solution(play_time, adv_time, logs) {
    let pt = transTime(play_time)
    let at = transTime(adv_time)
    
    let times = new Array(pt+1).fill(0)
    
    for(let log of logs){
        let [st, et] = log.split('-')
        times[transTime(st)] += 1
        times[transTime(et)] -= 1
    }
    
    for(let i=1; i<pt+1; i++){
        times[i] += times[i-1]
    }
    
    for(let i=1; i<pt+1; i++){
        times[i] += times[i-1]
    }
    
    let max = times[at-1]; 
    let answer = 0; 
    
    for(let i=at; i<pt+1; i++){
        let temp = times[i] - times[i-at]
        if(max < temp){
            answer = i-at+1
            max = temp
        }
    }
    
    return formatTime(answer)
    
    function transTime(str){
        let [h,m,s] = str.split(':')
        let amount = h*3600 + m * 60 + s*1
        return amount
    }
    
    function formatTime(time){
        let hh = parseInt(time/3600) 
        let mm = parseInt(time/60)%60
        let ss = parseInt(time%60)
        
        hh = String(hh).padStart(2, '0')
        mm = String(mm).padStart(2, '0')
        ss = String(ss).padStart(2, '0')
        
        return `${hh}:${mm}:${ss}`
    }
}

 

반응형