-
[효율성] 최대 매출알고리즘 2022. 7. 31. 19:18
문제
현수의 아빠는 제과점을 운영합니다. 현수 아빠는 현수에게 N일 동안의 매출기록을 주고 연속 된 K일 동안의 최대 매출액이 얼마인지 구하라고 했습니다.
만약 N=10이고 10일 간의 매출기록이 아래와 같습니다. 이때 K=3이면
12 15 11 20 25 10 20 19 13 15연속된 3일간의 최대 매출액은 11+20+25=56만원입니다. 여러분이 현수를 도와주세요.
▣ 입력설명
첫 줄에 N(5<=N<=100,000)과 M(2<=K<=N)가 주어집니다.
두 번째 줄에 N개의 숫자열이 주어집니다. 각 숫자는 500이하의 음이 아닌 정수입니다.▣ 출력설명
첫 줄에 최대 매출액을 출력합니다.▣ 입력예제 1
10 3
12 15 11 20 25 10 20 19 13 15▣ 출력예제 1 56
결과
O
내가 푼 방식
const solution = (arr, n) => { let maxSum = 0; for(let i=0; i < arr.length ; i++) { let sum = 0; for(let j=i; j < i+3; j++) { sum = sum + arr[j]; if(sum > maxSum) { maxSum = sum; } } } return maxSum; } solution([12,15,11,20,25,10,20,19,13,15],3)
접근과정
1. 리턴할 maxSum을 0으로 설정한다.
2. 첫 번째 반복문을 통해 각 요소를 순회하며 순회마다 sum의 값을 0으로 초기화한다.
3. 이중 반복문을 통해 첫 번째 반복문의 요소부터 n번째 까지 반복문을 돌고
4. 해당 반복문에서 sum의 값을 해당 요소로 더해준다.
5. 그리고 sum의 값이 maxSum보다 클 때 sum을 maxSum에 할당한다.
모범답안
function solution(k, arr){ let answer, sum=0; for(let i=0; i<k; i++) sum+=arr[i]; answer=sum; for(let i=k; i<arr.length; i++){ sum+=(arr[i]-arr[i-k]); answer=Math.max(answer, sum); } return answer; }
'알고리즘' 카테고리의 다른 글
[효율성/해쉬] 아나그램 (0) 2022.09.04 [효율성] 학급회장 해쉬 (0) 2022.08.07 [효율성/투포인터스 알고리즘] 연속 부분 수열2 (0) 2022.07.31 [효율성/투포인터스 알고리즘] 연속 부분 수열1 (0) 2022.05.08 [효율성/투포인터스 알고리즘] 공통 원소 구하기 (0) 2022.05.01