새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/JavaScript

[프로그래머스] 추석트래픽

by 언호 2022. 5. 24.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 접근 및 이해

입력으로 들어온 문자열 형태의 시간 정보를 서로 계산하기 쉽게 하기 위하여 밀리초로 변경하였습니다.

변경된 밀리초를 하나의 객체의 키값으로 저장하였고, 시작시간인 경우 +1 을, 종료 시간인 경우 -1 을 연산하였습니다.

 

이후 객체의 키들을 오름차순으로 정렬하였고, 키값들을 순환하며 초당 최대 처리량을 구하였습니다.

2) 알고리즘

  • 문자열

3) 풀이 코드

사용 언어 - JavaScript

function solution(lines) {
  let answer = 0          // 정답
  const timeline = {}     // 타임라인을 저장할 객체
  
  lines.map(v => v.split(' ')).forEach(v => {
      const hour = parseInt(v[1].slice(0, 2)) * 3600000       // 시간을 밀리초로 변경
      const minute = parseInt(v[1].slice(3, 5)) * 60000       // 분을 밀리초로 변경
      const second = parseFloat(v[1].slice(6)) * 1000         // 초를 밀리초로 변경
      
      let end = hour + minute + second                                            // 종료 시간
      const duration = parseFloat(v[2].replace('s', '')) * 1000                   // 소요 시간
      const start = end - duration + 1                                            // 시작 시간
      end += 1000                                                                 // 1초 동안의 처리량을 구해야하므로 종료 시간에 1초를 추가
      
      timeline[start] = timeline[start] === undefined ? 1 : timeline[start] + 1   // 시작 시간을 키값으로 값은 1
      timeline[end] = timeline[end] === undefined ? -1 : timeline[end] - 1        // 종료 시간을 키값으로 값은 -1
  })
  
  let cnt = 0
  Object.keys(timeline).sort((a,b) => a - b).forEach(v => {                       // 타임라인에 있는 시간들을 오름차순으로 정렬하여 1초동안 처리 가능한 최대 개수 구하기
      cnt += timeline[v] 
      answer = Math.max(answer, cnt)
  })
  
  return answer
}

🔗 문제 링크

- https://programmers.co.kr/learn/courses/30/lessons/17676?language=javascript 

 

코딩테스트 연습 - [1차] 추석 트래픽

입력: [ "2016-09-15 20:59:57.421 0.351s", "2016-09-15 20:59:58.233 1.181s", "2016-09-15 20:59:58.299 0.8s", "2016-09-15 20:59:58.688 1.041s", "2016-09-15 20:59:59.591 1.412s", "2016-09-15 21:00:00.464 1.466s", "2016-09-15 21:00:00.741 1.581s", "2016-09-1

programmers.co.kr

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

댓글