본문 바로가기
알고리즘 문제 풀이

1827. Minimum Operations to Make the Array Increasing

by 가나무마 2021. 6. 8.
728x90

배열의 각 숫자를 1씩 더할 수 있을 때, 배열이 오름차가 되기 위해선 몇 번 1을 더해야 하는지 구하시오.

[처음 푼 코드]

class Solution {
    public int minOperations(int[] nums) {
        int answer = 0;
        if (nums.length <= 1) return answer;

        for (int firstPointer = 0; firstPointer < nums.length -1; firstPointer++) {
            int secondPointer = firstPointer + 1;
            if (nums[firstPointer] >= nums[secondPointer]) {
                int temp = nums[firstPointer] - nums[secondPointer] + 1;
                nums[secondPointer] += temp;
                answer += temp;
            }
        }

        return answer;
    }
}

그냥 투포인터를 사용해서 앞에 요소랑 뒤에 요소를 비교하는 방법을 사용했습니다.
배열의 앞쪽의 값이 뒷쪽의 값보다 크거나 같을 경우 그 차만큼 뒤에 요소에 값을 더해야합니다.
하지만 여기서 단순히 차만큼 값을 더하면 앞쪽의 값과 뒷쪽의 값이 같아지므로 오름차가 아니게 됩니다.
따라서 1을 더해줍니다.

[모범답안]

class Solution {
    public int minOperations(int[] nums) {
        int cnt = 0, prev = 0;
        for (int cur : nums) {
            if (cur <= prev) {
                cnt += ++prev - cur;
            }else {
                prev = cur;
            }
        }
        return cnt;
    }
}
728x90
반응형