Skip to content

2021-05-14

leet code

3230 - Max Consecutive Ones II

내가 생각한 논리 대로 하면, if 문이 너무 복잡하게 들어가서 구현하기가 쉽지 않아보였습니다.

그래서 답을 먼저 보고, 답 대로 C++ 구현을 하는 방식으로 문제를 풀었습니다.

Left point와 Right point를 두고, 0의 개수가 2개를 넘지 않도록 L과, R의 위치를 조절하는 것이 핵심이었습니다.

0의 개수가 2개가 넘지 않는다 => R++

0의 개수가 2개가 넘는다 => L++

 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Solution {
public:
    int findMaxConsecutiveOnes(vector<int>& nums) {
        int numZeros = 0;
        int longest = 0;
        int L = 0;
        int R = 0;
        int curLong = 1;
        int size = nums.size();
        if (nums[0] == 0) numZeros++;
        while (R < size)
        {
            if (numZeros > 1)
            {
                // 비정상
                if (nums[L] == 0)
                {
                    numZeros--;
                }
                L++;
            }
            else
            {
                if (R+1 < size && nums[R+1] == 0)
                {
                    numZeros++;
                }
                R++;

            }
            curLong = R - L;
            if (curLong > longest)
            {
                longest = curLong;
            }
        }
        return longest;
    }
};