본문 바로가기

Algorithm/Implementation

(C++) - LeetCode (easy) 941. Valid Mountain Array

반응형

https://leetcode.com/problems/valid-mountain-array/description/

 

Valid Mountain Array - LeetCode

Can you solve this real interview question? Valid Mountain Array - Given an array of integers arr, return true if and only if it is a valid mountain array. Recall that arr is a mountain array if and only if: * arr.length >= 3 * There exists some i with 0 <

leetcode.com

구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

arr 길이 sz, array 상태 stat, 산 꼭대기 peak를 선언 후 초기화해줍니다.stat을 의미하는 DEFAULT -1, INCREASING 1, MOUNTAIN_ARRAY 2를 상수로 정했습니다.

📔 풀이과정

먼저 인접 원소를 비교했을 때 굴곡 없이 증가해야합니다.1. arr의 원소를 순회하며 값이 감소하는 지점의 index를 peak에 저장하고 break합니다.2. peak부터 arr size만큼 순회하며 값이 점차 감소하는지 확인해줍니다. 같거나 증가한다면 바로 false를 반환합니다. stat의 상태가 증가한 기록이 있다면 stat의 상태를 MOUNTAIN_ARRAY로 저장합니다.* 인접 원소가 같다면 바로 false를 반환합니다.

📔 정답 출력 | 반환

stat이 MOUNTAIN_ARRAY인지 여부를 반환합니다.


📕 Code

📔 C++

#define DEFAULT -1
#define INCREASING 1
#define MOUNTAIN_ARRAY 2

class Solution {
public:
    bool validMountainArray(vector<int>& arr) {
        int sz = arr.size();
        int stat = DEFAULT;
        int peak = 0;
        for(int i = 0; i < sz - 1; i++) {
            if (arr[i] == arr[i+1]) return false;
            if (arr[i] > arr[i+1]) {
                peak = i;
                break;
            }
            stat = INCREASING;
        }
        for(int i = peak; i < sz - 1; i++) {
            if (arr[i] == arr[i+1]) return false;
            if (arr[i] < arr[i+1]) {
                return false;
            }
            if(stat == INCREASING) stat = MOUNTAIN_ARRAY;
        }
        return stat == MOUNTAIN_ARRAY;
    }
};

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