728x90
https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[나의 코드]
function solution(fees,records){
let answer=[]
const idTimeMap = new Map()
for(i=0;i<records.length;i++){
const [time,id,type]=records[i].split(" ")
const hour=parseInt(time.split(":")[0])
const minute=parseInt(time.split(":")[1])
const modifiedTime =hour*60+minute;
if(!idTimeMap.get(id)&&type==="IN"){
//처음 들어올 때
idTimeMap.set(id,[modifiedTime,type])
}else if(idTimeMap.get(id)&&type==="OUT"){
//나갈 때
prevTime = idTimeMap.get(id)[0]
idTimeMap.set(id,[modifiedTime-prevTime,type])
}else if(idTimeMap.get(id)&&type==="IN"){
//처음 아닌데 들어올 때
prevTime = idTimeMap.get(id)[0]
idTimeMap.set(id,[modifiedTime-prevTime,type])
}else{
//처음 아닌데 나갈 때
prevTime = idTimeMap.get(id)[0]
console.log(modifiedTime)
idTimeMap.set(id,[modifiedTime+prevTime,type])
}
}
//IN은 있는데 OUT이 없는 경우 예외 처리
for(i=0;i<idTimeMap.size;i++){
const id = Array.from(idTimeMap)[i][0]
const type=Array.from(idTimeMap)[i][1][1]
const prevTime=Array.from(idTimeMap)[i][1][0]
const surplusTime = 23*60+59
if(type==="IN"){
idTimeMap.set(id,[surplusTime-prevTime,"OUT"])
}
}
const calculateFee =(map)=>{
// id값 기준으로 오름차순 정렬
let array = [...idTimeMap].sort(function(a,b){return a[0]-b[0]})
const freeTime = fees[0] // 무료 시간
const defaultFee = fees[1] // 기본 요금
const unitTime = fees[2]// 단위 시간
const unitFee = fees[3]// 단위 요금
for(i=0;i<array.length;i++){
const totalMinute=array[i][1][0]
const totalPrice = defaultFee+Math.ceil((Math.max(totalMinute-freeTime,0))/unitTime)*unitFee
answer.push(totalPrice)
}
return answer
}
return calculateFee(idTimeMap)
}
약 한시간 정도 시간이 걸렸다. 크게 어려운 점은 없었고, 문제를 읽고 예외처리를 해주는 데에 신경을 썼다
728x90
'알고리즘' 카테고리의 다른 글
프로그래머스 > 2018 KAKAO BLIND RECRUITMENT > [1차] 뉴스 클러스터링 (1) | 2023.04.17 |
---|---|
프로그래머스 > 2018 KAKAO BLIND RECRUITMENT > 파일명 정렬 (0) | 2023.04.13 |
프로그래머스 > 월간 코드 챌린지 시즌3 > N^2 배열 자르기 (0) | 2023.04.10 |
JavaScript 정렬 라이브러리 (0) | 2023.04.09 |
JavaScript 정렬(Sorting) 알고리즘: 선택 정렬, 버블 정렬, 삽입 정렬, 병합 정렬 (0) | 2023.04.07 |