https://leetcode.com/problems/maximum-points-you-can-obtain-from-cards/
Maximum Points You Can Obtain from Cards - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
문제 조건 및 풀이
배열의 양 끝 숫자 중 하나를 포함하는 길이 k의 연속된 부분 배열 중 그 합이 최대가 되는 부분 배열을 찾는 문제.
배열의 길이가 N이라고 할 때, N - k에서부터 k개 요소의 합을 구한 다음, 가장 왼쪽 요소를 빼고 오른쪽 요소를 하나 추가하는 방식으로 k개의 합을 유지하면서 최댓값을 지속적으로 갱신해 나간다.
코드
class Solution {
public:
int maxScore(vector<int>& cardPoints, int k) {
int N = cardPoints.size();
int ret = 0;
int answer = 0;
for (int i = N - k ; i < N ; i++) {
ret += cardPoints[i];
}
answer = ret;
for (int i = N - k + 1 ; i <= N; i++) {
ret -= cardPoints[(i - 1) % N];
ret += cardPoints[(i + k - 1) % N];
answer = max(answer, ret);
}
return answer;
}
};
'algorithm' 카테고리의 다른 글
221. Maximal Square (0) | 2021.07.13 |
---|---|
[BOJ 17822] 원판 돌리기(C++) (0) | 2019.12.02 |
[BOJ 15686] 치킨 배달 (0) | 2019.04.13 |
[BOJ 16236] 아기 상어 (0) | 2019.04.09 |
[BOJ14889] 스타트와 링크 (0) | 2019.03.28 |
댓글