아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

전구 장식

면접 대비

시간 제한1초메모리 제한128 MB

요약
0과 1로 이루어진 수열이 주어질 때, 연속한 한 구간을 최대 한 번 뒤집어 만들 수 있는 가장 긴 교대 부분수열의 길이를 구한다.
난이도

보통10점 중 6점

유형
배열, 누적 합, 구현, 투 포인터
정답자
아직 제출이 없습니다

문제

축제 기간이 되면 상근이는 매년 복도를 화려한 전구 장식으로 꾸민다. 장식은 일렬로 늘어선 전구 NN개로 이루어지며, 각 전구는 켜져 있거나 꺼져 있다.

상근이는 전구를 조작하는 기계를 가져왔다. 이 기계는 연속한 구간을 하나 지정하면, 그 구간에 있는 전구의 상태를 모두 반전시킨다. 즉 켜져 있던 전구는 끄고, 꺼져 있던 전구는 켠다. 다만 이 기계는 매우 낡아서, 한 번 사용하면 다음 해가 될 때까지 다시 쓸 수 없다.

학생들은 켜진 전구와 꺼진 전구가 번갈아 나타나는 배열을 좋아하는데, 이러한 배열을 교대 패턴이라고 부른다. 상근이는 기계를 최대 한 번만 사용해서 가장 긴 교대 패턴을 만들려고 한다.

예를 들어 전구가 다음과 같이 놓여 있다고 하자. (○는 켜진 전구, ●는 꺼진 전구)

○ ○ ● ● ○ ● ○ ○ ○ ●

여기서 4번째부터 7번째까지 네 개의 전구에 기계를 사용하면 다음과 같이 바뀐다.

○ ○ ● ○ ● ○ ● ○ ○ ●

이때 2번째부터 8번째까지가 길이 7인 교대 패턴을 이룬다.

또는 8번째 전구 하나에만 기계를 사용하면 다음과 같이 바뀐다.

○ ○ ● ● ○ ● ○ ● ○ ●

이 경우에는 4번째부터 10번째까지가 길이 7인 교대 패턴을 이룬다.

이 예에서는 기계를 한 번만 써서 길이가 8 이상인 교대 패턴을 만들 수 없다.

전구의 초기 상태가 주어질 때, 기계를 최대 한 번 사용해서 만들 수 있는 가장 긴 교대 패턴의 길이를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 전구의 개수 NN이 주어진다. (2≤N≤100,0002 \le N \le 100{,}000)

둘째 줄에는 왼쪽 전구부터 순서대로 각 전구의 상태가 공백으로 구분되어 주어진다. 상태는 11 또는 00이며, 11은 켜진 상태, 00은 꺼진 상태를 뜻한다.

출력

첫째 줄에 기계를 최대 한 번 사용해서 만들 수 있는 가장 긴 교대 패턴의 길이를 출력한다.

예제4

  1. 예제 1

    입력
    10
    1 1 0 0 1 0 1 1 1 0
    
    예상 출력
    7
    
  2. 예제 2

    입력
    10
    1 0 0 0 0 1 0 1 0 1
    
    예상 출력
    8
    
  3. 예제 3

    입력
    5
    1 1 0 1 1
    
    예상 출력
    5
    
  4. 예제 4

    입력
    3
    0 1 0
    
    예상 출력
    3