250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

[Algorithm] 주차 요금 계산 (Programmers - JavaScript) 본문

[Snow-ball]프로그래밍(컴퓨터)/Algorithm Training

[Algorithm] 주차 요금 계산 (Programmers - JavaScript)

Snow-ball 2023. 12. 12. 22:51
반응형

문제 설명

주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 떄, 차량별로 주차요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.

 

 

 

 

 


 

 

 

제한사항

 

 

 


 

 

 

입출력 예

 

 

 


 

 

 

입출력 예 설명

입출력 예 #1

문제 예시와 같습니다.

 

 

 

 

 


 

 

 

풀이:

[ 주차 요금 계산 ] 알고리즘 문제의 경우에는 recodes 배열이 for문을 한번 도는 동안 얼마나 시간을 사용했는지에 대해 계산처리하면 되는 문제였다.

 

순서를 정리하자면,

첫째. recodes 배열에 값을 기준으로 In/Out 기준으로 분기처리를해 시간 계산처리를 한다.

둘째. 차 번호는 작은숫자의 순서대로 정렬이 되어야 하기 때문에 정렬을 하면서, 요금을 정산하기 전 table의 totalTime 값이 0보다 작다면 출차하지 않았기 때문에 23:59기준으로 처리를한다.

셋째. 요금을 정산하여 배열에 담는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function solution(fees, records) {
  const answer = [];
  const table = {};
  const carNumberSet = new Set();
 
  records.forEach((el) => {
    const [time, carNumber, IO] = el.split(" ");
    const [hour, minute] = time.split(":").map(Number);
    const totalTime = hour * 60 + minute;
 
    carNumberSet.add(carNumber);
 
    if (IO === "IN") {
      table[carNumber] = (table[carNumber] || 0- totalTime;
    } else {
      table[carNumber] += totalTime;
    }
  });
 
  [...carNumberSet].sort().forEach((key) => {
    if (table[key] < 1) {
      table[key] += 1439;
    }
 
    const [basicTime, basicFee, unitTime, unitFee] = fees;
 
    if (table[key] < basicTime) {
      answer.push(basicFee);
    } else {
      answer.push(
        basicFee + Math.ceil((table[key] - basicTime) / unitTime) * unitFee
      );
    }
  });
 
  return answer;
}
cs

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

반응형
Comments