https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정말 문제를 잘 읽어야하는 문제이다. 기본적인 상식 or지식으로 풀면 안된다.
유의해야하는 점
1. 실행결과는 출차 시간에 따른 배열이 아니고 차 번호를 작은 순으로 정렬한 배열이다.
2. 입차-출차-입차-출차를 했을시 각각의 주차요금을 계산하는게 아니고 총 주차시간을 기준으로 주차요금을 계산하게 된다.
정말로 많이 시간을 끌었던 문제였다. 문제를 제대로 읽지 않은 게 굉장히 아주 큰 패착이였다.
계속 잘못된 점이 보이다 보니 그 부분만 수정하게 되어서 조금 코드의 가독성이 좋지 않아졌다..
function solution(fees, records) {
let obj={}
let obj2={}
// 객체 2개를 만든다
// obj2는 총 시간을 담게된다. obj2에 시간을 담으면 해당 키는 obj 에서 삭제하는 방식으로
//입차만 한 차를 걸러낸다.
//걸러진 obj에서 다시 obj2에 시간을 담는다
for(let i =0;i<records.length;i++){
let dd=records[i].split(' ')
if(dd[2]==='IN'){
obj[dd[1]]=dd[0]
}else{
if(obj2[dd[1]]===undefined){
obj2[dd[1]]= ee(obj[dd[1]],dd[0])
}else{
obj2[dd[1]]+=ee(obj[dd[1]],dd[0])
}
delete obj[dd[1]]
}
}
for(let key in obj){
if(obj2[key]===undefined){
obj2[key]=ee(obj[key],'23:59')
}else{
obj2[key]+=ee(obj[key],'23:59')
}
}
return Object.keys(obj2).sort((a,b)=>Number(a)-Number(b)).map(el=>cc(obj2[el],fees))
}// 꽤나 긴데 key값을 배열로 만들고, 오름차순으로 정렬 후 key값을 해당 fee값으로 변경시킨다
//총 시간을 계산하는 함수
function ee(iN,out){
let outArr=out.split(':')
let inArr =iN.split(':')
let time=(Number(outArr[0])-Number(inArr[0]))*60+ Number(outArr[1]-inArr[1])
return time
}
//fee를 계산하는 함수
function cc(time,fees){
if(time<=fees[0]){
return fees[1]
}else {
return fees[1]+Math.ceil((time-fees[0])/fees[2])*fees[3]
}
}
레벨 2로 가니 문제들이 정말 길어졌다 조금 더 잘 해야하는데ㅠㅠ
'알고리즘 > 프로그래머스 문제-JS' 카테고리의 다른 글
[JS/LV3]입국 심사 (0) | 2024.08.18 |
---|---|
[JS]카드 뭉치 (0) | 2023.03.28 |
[JS] 겹치는 선분의 길이 (0) | 2022.11.01 |
[JS]키패드 누르기 (0) | 2022.07.12 |
[JS]부족한 금액 (0) | 2022.07.06 |