본문 바로가기

Algorithm/Greedy

(C++) - LeetCode (easy) 1005. Maximize Sum Of Array After K Negations

반응형

https://leetcode.com/problems/maximize-sum-of-array-after-k-negations/

 

LeetCode - The World's Leading Online Programming Learning Platform

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

greedy문제 였습니다.

📕 풀이방법

📔 풀이과정

원소 전체 합이 최대가 되려면 가장 작은 음수부터 최대한 flip해줘야합니다. 따라서 1. nums를 먼저 오름차순으로 정렬해줍니다.2. nums의 원소를 순회하며 k가 0이 될때까지 n의 원소를 flip해줍니다.3. 남은 k개수가 짝수라면 같은 것을 선택해 flip하는 것이 가장 이득입니다. 따라서 따로 확인할 필요가 없고 홀수인 경우만 따져서 가장 최소인 작은 값만 flip해줍니다.4. nums 원소들의 합을 sum에 저장합니다.

📔 정답 출력 | 반환

sum을 반환합니다.


📕 Code

📔 C++

class Solution {
public:
    int largestSumAfterKNegations(vector<int>& nums, int k) {
        sort(nums.begin(), nums.end());
        for (auto &n : nums) {
            if(k == 0) break;
            if(n > 0) continue;
            n = -n, k--;
        }
        int minNum = 0x3f3f3f3f;
        if(k % 2 == 1) {
            for(auto n : nums) {
                minNum = min(minNum, n);
            }
            for(auto &n : nums) {
                if(minNum == n) {
                    n = -n;
                    break;
                }
            }
        }
        int sum = 0;
        for(auto n : nums) {
            sum += n;
        }
        return sum;
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.