현인

[프로그래머스] 주차 요금 계산 with JS 본문

알고리즘

[프로그래머스] 주차 요금 계산 with JS

현인(Hyeon In) 2023. 3. 27. 01:55

알고리즘 스프린트 4일차 - [프로그래머스] Lv 2. 주차 요금 계산 (카카오 기출)

https://school.programmers.co.kr/learn/courses/30/lessons/92341?language=javascript 

 

프로그래머스

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

programmers.co.kr

 

소요시간

40분 생각보다 코드 타이핑이 오래걸렸다

 

계획

아무리 수도 코드라지만 변수명을 너무 대충썼나..

차량 번호가 10000개니까 배열 두 개 만들어서 하나는 입출고 시간 적는 배열, 하나는 누적시간 담는 배열로 만들어서 풀면 될 것 같다고 생각함

 

풀이

카카오가 문자열 다루는 구현 문제를 이렇게 내는 경우가 많은데 사실 고민해보면 Lv2 정도는 아닌 느낌이 든다...

각설하고,

 

  • 입고 시간을 저장하는 배열과 누적시간을 담는 배열 두 개를 만들어서
  • 차량 번호를 배열의 인덱스로 사용한다
  • 차량이 입고 하면 입고 배열에 시간을 기록하고, 출고하면 입고 배열을 초기화하고 누적시간 배열을 증가시킨다
  • 누적시간을 기록하고 계산하기 편하게 분 단위로 기록하였고 따라서 분 단위로 계산해주는 함수를 작성했다
  • 전체 가격을 계산하는 함수도 따로 작성하였다
  • 위 와 같이 함으로써 코드를 작성함에 불편함을 없도록 하였으나 걸린 시간만 따지면 비슷하긴 하다

결과

코드

더보기

function timeToNum(time){
    let t = time.split(':');
    let result = 0;
    result += parseInt(t[0]) * 60 + parseInt(t[1]);
    return result;
}

function calcCost(sum, fees){
    if (sum > fees[0]){
        return fees[1] + Math.ceil((sum - fees[0]) / fees[2]) * fees[3];       
    }
    else{
        return fees[1]
    }
}

function solution(fees, records) {
    var answer = [];
    let times = [];
    let sum = [];
    
    for (let i = 0; i < 10000; i++){
        times.push(-1);
        sum.push(0);
    }
    //temp : "16:00 3961 IN"
    for (let i = 0; i < records.length; i++){
        let temp = records[i].split(' ');
        if(temp[2] == "IN"){
            times[parseInt(temp[1])] = timeToNum(temp[0]);
        }
        else{
            sum[parseInt(temp[1])] += timeToNum(temp[0]) - times[parseInt(temp[1])];
            times[parseInt(temp[1])] = -1;
        }
    }
    for (let i = 0; i < 10000; i++){
        if (times[i] != -1){
            sum[i] += 1439 - times[i];
        } 
    }
    for (let i = 0; i < 10000; i++){
        if (sum[i] != 0){
            answer.push(calcCost(sum[i], fees))
        }
    }
    return answer;
}

 

마치며

 문자열 다루기 문제들은 문자열과 관련된 함수들을 잘 알고 있어야 풀 수 있다. 이번 문제에서는 split이나 parseInt가 중요했다. 문자열 뿐만 아니라 Math의 함수인 ceil() 함수도 알고 있어야 풀 수 있었다. 아니면 뭐 직접계산해도 되긴하지만.. 알고 있으면 편하니까..! 간만에 슴슴한 구현 문제라서 덤덤하게 풀었다

반응형