적립 한도를 적용한 포인트 합계
자바스크립트 코딩테스트 문제로 clamp-sum 주제를 연습해보세요. 난이도는 easy이며, 브라우저에서 바로 JavaScript로 풀이를 실행할 수 있습니다.
주문별 예상 적립 포인트가 담긴 배열 points와 주문 1건당 최대 적립 한도 cap이 주어질 때, 실제로 적립되는 총 포인트를 반환하는 sumCappedRewardPoints 함수를 작성하세요.
각 주문은 cap을 넘겨 적립될 수 없습니다. 예를 들어 어떤 주문의 예상 포인트가 120이고 cap이 100이면, 그 주문에서는 100포인트만 적립됩니다.
제한사항
points의 길이는 0 이상 100,000 이하입니다.points의 각 원소는 0 이상 1,000,000 이하의 정수입니다.cap은 0 이상 1,000,000 이하의 정수입니다.- 각 주문에서 실제 적립되는 포인트는
points[i]와cap중 더 작은 값입니다. - 반환값은 모든 주문의 실제 적립 포인트 합계입니다.
예시
- 입력:
points = [120, 80, 200],cap = 100→ 출력:280 - 입력:
points = [],cap = 50→ 출력:0 - 입력:
points = [0, 30, 70],cap = 40→ 출력:70
힌트
- 주문마다
points[i]가cap보다 큰지 확인해 보세요. - 실제 적립 포인트는
Math.min(points[i], cap)으로 구할 수 있습니다.
해설
이 문제는 배열을 한 번 순회하면서 각 주문에 상한선을 적용해 더하는 구현 문제입니다.
예를 들어 points = [120, 80, 200], cap = 100이면 실제 적립 포인트는 다음과 같습니다.
- 첫 번째 주문:
min(120, 100) = 100 - 두 번째 주문:
min(80, 100) = 80 - 세 번째 주문:
min(200, 100) = 100
따라서 총합은 100 + 80 + 100 = 280입니다.
배열이 비어 있으면 더할 주문이 없으므로 0을 반환합니다. cap이 0이면 모든 주문에서 적립 가능한 최대값이 0이므로 결과도 0입니다.
각 원소를 한 번씩만 보면 되기 때문에 시간 복잡도는 O(n)입니다.
코드 작성
starter code를 바탕으로 함수를 완성한 뒤 예제 테스트를 실행해보세요.
JavaScript
에디터 로딩 중...
커스텀 테스트
함수 인자를 JSON 배열 형태로 입력하세요. 예: [3, 5], [[1, 2, 3]]
아직 실행하지 않았습니다.
실행 결과
아직 실행하지 않았습니다.
예제 테스트를 실행하면 여기에서 결과를 확인할 수 있습니다.
댓글
문제 풀이 아이디어, 질문, 반례를 자유롭게 나눠보세요.