Post

leetcode(리트코드)5월11일 challenge1423-Maximum Points You Can Obtain from Cards

leetcode May 11일 - Maximum Points You Can Obtain from Cards 문제입니다.

1. 문제

https://leetcode.com/problems/maximum-points-you-can-obtain-from-cards/


2. Input , Output


3. 분류 및 난이도

Medium 난이도입니다.
5월 11일자 챌린지 문제입니다.


4. 문제 해석

  • cardPoints라는 벡터가 들어옵니다. 맨 뒤와 맨 앞 중 골라 k만큼 뽑았을 때 그 포인트의 합계가가 가장 클 때의 값을 리턴합니다.

5. code

1,2,3,4,5,6,1 기준으로 k가 3일때 맨앞에서 부터 더하면 1,2,3,x,x,x,x 입니다. 3을 제외하고 뒤에있는 1을 뽑은 경우 1,2,x,x,x,x,1 인 경우가 됩니다.
같은 방식으로 2를 제외하고 뒤에 있는 6을 뽑으면 1,x,x,x,x,6,1인 경우가 되고 마찬가지로
x,x,x,x,5,6,1 을 뽑은 이 경우가 최선의 답이므로 리턴합니다.

우선순위 큐를 이용해서 값이 큰 것을 자동으로 큐 앞에 넣어 해당 값을 리턴하도록 작성하였습니다.

c++

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
class Solution {
public:
    int maxScore(vector<int>& cardPoints, int k) {
        int ans = 0 ;
        for(int i = 0 ; i < k; ++i){
            ans += cardPoints[i];
        }
        if(k == cardPoints.size())
            return ans;
        
        int pick = 1;
        int right = cardPoints.size()-1;
        priority_queue<int> pq;
        pq.push(ans);
        while(pick <= k){
            ans -= cardPoints[k - pick] ;
            ans += cardPoints[right--];
            ++pick;
            pq.push(ans);
        }
        
        return pq.top();
        
    }
};

6. 결과 및 후기, 개선점

This post is licensed under CC BY 4.0 by the author.