[코딩테스트 풀이] 부족한 금액 계산하기

Jeenie·2024년 6월 4일

1. while문 사용

나는 while문을 사용하여 풀었다.
최악의 상황 가정하여 최대소요시간 0.16ms
정보처리기사 실기문제에서 자주 나오는 패턴이라 익숙한데,
아마 출제용으로 가독성을 꼬아놓은 좋지 않은 패턴일 것이다

function solution(price, money, count) {
    // 3, 20, 4 => 이용금액 30 (3 + 3*2 + 3*3 + 3*4)
    var answer = -1;
    let p = 0
    while(count){
        p += price*count;
        count --;
    }
    
    if(p > money) {
        answer = p - money 
    } else {
        answer = 0
    }
    

    return answer;
}

변수 p를 선언해서 메모리 낭비
while문 사용

그럼 다른 방식을 찾아보자

2. Array로 만들어 reduce

(최악의 상황 가정) 최대소요시간 0.14ms
Array도 만들고 reduce도 돌았는데 while보다 조금 더 빠르다

function solution(price, money, count) {
    const totalPrice = price * new Array(count).fill(0).reduce((acc, cur, i) => acc + i + 1, 0)
    return totalPrice - money >= 0 ? totalPrice - money : 0
}

번외) 시간복잡도의 중요성 - 가우스 수학공식을 사용한다면

아래는 다른사람의 풀이. 내가 이해를 못해서 번외다
(최악의 상황 가정) 최대소요시간 0.05ms
세상에 내가 처음 while문으로 풀이한 것보다 무려 68.75%나 빠르다.
이래서 알고리즘에 시간복잡도가 중요하다고 하는 거구나.

나는 계산식을 보고 해설을 봐도 전혀 모르겠지만... 수학 잘하고 싶다 🫠

function solution(price, money, count) {
    const tmp = price * count * (count + 1) / 2 - money;
    return tmp > 0 ? tmp : 0;
}
profile
Web Front-end developer

0개의 댓글