1차 작성코드
function solution(fees, records) { const park_dict = new Map() records.forEach((record) => { const [re_time,who,InOrOut] = record.split(" ") if(park_dict[who]) { if(InOrOut == "OUT") { let [afterHour,afterMin] = re_time.split(":").map((time) => parseInt(time)) let [beforeHour,beforeMin] = (park_dict[who]["time"][park_dict[who]["time"].length-1]).split(":") park_dict[who]["acc"]+= (afterHour-beforeHour)*60 + (afterMin-beforeMin) park_dict[who]["inOut"].push(InOrOut) park_dict[who]["time"].push(re_time) } else { park_dict[who]["inOut"].push(InOrOut) park_dict[who]["time"].push(re_time) } } else { park_dict[who] = {acc:0,time:[re_time],inOut:[InOrOut]} } }) for(park in park_dict) { if(park_dict[park]["inOut"][park_dict[park]["inOut"].length-1] == "IN") { let [beforeHour,beforeMin] = (park_dict[park]["time"][park_dict[park]["time"].length-1]).split(":") park_dict[park]["acc"]+= (23-beforeHour)*60 + (59-beforeMin) } } let result_list = [] for(park in park_dict) { if(park_dict[park]["acc"] <= fees[0]) { result_list.push([park,fees[1]]) } else { result_list.push([park,Math.ceil((park_dict[park]["acc"]-fees[0])/fees[2])*fees[3]+fees[1]]) } } return result_list.sort((a,b) => a[0]-b[0]).map(v => v[1]) }
다른 사람의 풀이
function solution(fees, records) { const parkingTime = {}; records.forEach(r => { let [time, id, type] = r.split(' '); let [h, m] = time.split(':'); time = (h * 1) * 60 + (m * 1); if (!parkingTime[id]) parkingTime[id] = 0; if (type === 'IN') parkingTime[id] += (1439 - time); if (type === 'OUT') parkingTime[id] -= (1439 - time); }); const answer = []; for (let [car, time] of Object.entries(parkingTime)) { if (time <= fees[0]) time = fees[1]; else time = Math.ceil((time - fees[0]) / fees[2]) * fees[3] + fees[1] answer.push([car, time]); } return answer.sort((a, b) => a[0] - b[0]).map(v => v[1]); }
총평 :
아직 프로그래머스에서는 at과 같은 자바스크립트 기능을 쓰지 못하는 점을 유의하자
변수명을 길게 설정하지 말자. 여긴 코딩테스트다. 예쁜 이름이 필요하지 않다. 한 글자로 설정해보자.
sort 함수를 쓰는 방법을 기억하자.
사실상 에러 고치는데 시간이 많이 쓰인다.
-1) 딕셔너리를 불러올 때에는 변수에 할당된 것을 쓰지 않는 이상, 따옴표로 감싸서 불러온다.
비구조화 할당을 버릇들이자.