나는 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문 사용
(최악의 상황 가정) 최대소요시간 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;
}