티스토리 뷰
문제
현수의 아빠는 제과점을 운영합니다. 현수 아빠는 현수에게 N일 동안의 매출기록을 주고 연속
된 K일 동안의 최대 매출액이 얼마인지 구하라고 했습니다.
만약 N=10이고 10일 간의 매출기록이 아래와 같습니다. 이때 K=3이면
12 15 11 20 25 10 20 19 13 15
연속된 3일간의 최대 매출액은 11+20+25=56만원입니다.
여러분이 현수를 도와주세요.
풀이
function solution(k, arr) {
let answer,
sum = 0;
let rt = 0,
lt = 0;
let max = Number.MIN_SAFE_INTEGER;
for (let i = 0; i < arr.length; i++) {
sum += arr[rt++];
while (rt - lt > k) sum -= arr[lt++];
if (max < sum) max = sum;
}
answer = max;
return answer;
}
let a = [12, 15, 11, 20, 25, 10, 20, 19, 13, 15];
console.log(solution(6, a));
투포인터를 이용해서 sum에 arr[rt]를 더해주었고 rt -lt 값이 k값보다 초과라면 sum에 arr[lt]를 계속 뺴주었습니다.
다른 풀이
function solution(k, arr) {
let answer,
sum = 0;
for (let i = 0; i < k; i++) {
sum += arr[i];
//console.log(i, sum);
}
answer = sum;
for (let i = k; i < arr.length; i++) {
sum += arr[i] - arr[i - k];
answer = Math.max(answer, sum);
}
return answer;
}
let a = [12, 15, 11, 20, 25, 10, 20, 19, 13, 15];
console.log(solution(2, a));
윈도우 슬라이딩 기법을 이용해서 맨처음 k값만큼의 합을 더해 answer 에 저장해줍니다.
그리고 k부터 시작하는 for문을 만들어서 sum += arr[i] - arr[i-k]를 해주었습니다.
풀어서 설명드리자면 12,15,11,20,25 가 있고 k값이 3이라면
answer 에는 12+15+11 = 38 으로 저장을 해 둔뒤
k값만큼의 범위를 움직이는 것입니다.
answer 에 11 다음인 20 값을 더해주고 범위가 늘어났으니 맨 앞의 12를 뺴주는 방법입니다.
'알고리즘 > 코딩테스트 공부' 카테고리의 다른 글
5-7 아나그램(해쉬) (0) | 2021.12.02 |
---|---|
5-6 학급 회장(해쉬) (0) | 2021.12.01 |
5-4 연속 부분수열 2 (0) | 2021.12.01 |
5-3 연속 부분수열 1 (0) | 2021.12.01 |
5-2 공통원소 구하기 (0) | 2021.12.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 노마드코더
- nodejs
- electron
- NextApiRequest
- createPortal
- TopLayer
- Storybook
- 스토리 북
- 아차산
- env
- 노개북
- javascript
- 초보
- React
- nextjs
- 원티드
- C언어
- WSL2
- 북클럽
- 우아한테크코스
- import/order
- jest
- CLASS
- 위코드
- 프리온보딩
- NextRequest
- 윤성우 열혈C프로그래밍
- error
- 프론트앤드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함