본문 바로가기

Algorithm/Implementation

(C++) - LeetCode (easy) 1796. Second Largest Digit in a String

반응형

https://leetcode.com/problems/maximum-ascending-subarray-sum/

구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

이전 숫자를 저장할 변수 piv와 오르막 구간의 누적합의 최댓값 maxSum과 한 구간의 오르막 구간 누적합 sum을 선언한 후 모두 nums[0]번째 값으로 초기화합니다.

📔 풀이과정

1. 1번째 부터 nums.size() - 1 까지 for loop를 수행하며 다음을 진행합니다.

  1-1. 이전 값 piv보다 현재 값이 크다면 오르막 구간이므로 sum에 현재 값을 누적해 줍니다.

  1-2. 이전 값 piv가 현재 값 이상이라면 평지 혹은 내리막 구간이므로 현재까지의 sum값과 maxSum 중 최댓값을 maxSum에 저장합니다. 이후 sum은 다시 현재 값부터 시작하므로 재할당합니다.

  1-3. piv를 현재값으로 옮겨줍니다.

📔 정답 출력 | 반환

maxSum과 마지막 구간 sum 중 최댓값을 반환합니다.


📕 Code

📔 C++

class Solution {
public:
    int maxAscendingSum(vector<int>& nums) {
        int piv = nums[0];
        int maxSum = nums[0];
        int sum = nums[0];
        for(int i = 1; i < nums.size(); i++) {
            if (piv < nums[i]) sum += nums[i];
            else {
                maxSum = max(maxSum, sum);
                sum = nums[i];
            }
            piv = nums[i];
        }
        return max(maxSum, sum);
    }
};

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