-
[프로그래머스] 위클리 1주차 - 부족한 금액 계산하기(JS)알고리즘/프로그래머스 2021. 9. 30. 13:48728x90
문제 이해하기
- 제공되는 데이터는 이용료, 현재 금액, 놀이기구 타고싶은 횟수를 가지고 원하는 만큼 놀이기구를 탈때 금액이 얼마가 모자르는지 출력해야한다.
- 놀이기구는 N번째 이용한다면, 원래 이용료의 N배를 받기로 한다.
(처음 100 -> 200 -> 300)
데이터 추상화
- 인풋 데이터는 이용료, 현재 금액, 타고 싶은 횟수로 정수로 제공 된다.
- 아웃풋 즉 결과는 모자른 금액을 제공 하므로 정수를 리턴하면 된다.
알고리즘
- 일반적인 풀이
놀이기구를 N번 이용하고, 이용료가 P라면 식은 다음과 같다
- P * N + P * ( N - 1 ) + ... + P * ( N - N)
- 이용료에서 N을 곱한 값부터, N이 0이 될때까지 더해준다 .
- 이후 현재 금액을 뺀 나머지 값이 결과 값이다.
더 좋은 알고리즘은 무엇이 있을까? 가우스 알고리즘이 있다.function solution(price, money, count) { while( count ){ answer += price * count; count--; } if( answer >= money ){ return answer - money; } return 0; }
- 가우스 알고리즘 풀이
마찬가지로 놀이기구를 N번 이용하고, 이용료가 P라면 가우스를 활용한식은 다음과 같다
- ( P + P * C ) * ( C / 2 )
= ( P * C ) * ( C + 1 )
- 이후 현재 금액을 뺀 나머지 값이 결과다
function solution(price, money, count) { var answer = 0; // 가우스 공식 활용 answer = ( price + price * count ) * ( count / 2 ) - money; return answer < 0 ? 0 : answer; }
정리 및 느낀점
- 일반적인 풀이와, 가우스 공식을 이용한 알고리즘 풀이에 대해 알아보았다.
- 시간복잡도는 가우스 공식이 좋았고, 코드 가독성 측면에서는 일반적인 코드가 더 좋아보인다.
- 실전에서는 효율성이 중요하기 때문에 소스에 주석으로 어떤 공식을 사용했는지 적어놓자.
출처
https://programmers.co.kr/learn/courses/30/lessons/82612
728x90'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 위클리 10주차 - 교점에 별 만들기(JS) (0) 2021.10.14 [프로그래머스] 타겟 넘버 (JS) (0) 2021.10.10 [프로그래머스] 위클리 9주차 - 전력망을 둘로 나누기(JS) (0) 2021.10.09 [프로그래머스] 위클리 2주차 - 상호평가(JS) (0) 2021.10.04 [프로그래머스] 위클리 6주차 - 복서 정렬 하기(JS) (0) 2021.09.25