업데이트:

5527번 - 전구 장식

문제 이해

주어진 0/1 패턴에서 구간을 한 번만 뒤집는데 0과 1이 교대로 나타나는 패턴이 가장 길게 뒤집을 때, 그 구간의 길이를 구하는 문제.

1100101110의 패턴이 있다면, 1101010110이 되게 뒤집어 7을 답으로 얻을 수 있다.

접근

구간을 뒤집어도 그 구간 안에서는 0과 1이 모두 바뀌기에 이미 교대로 되어있던 구간이 합쳐지는 경우에 구간의 길이가 길어진다.

기존에 교대로 되어있던 구간들이 있으면, 연속된 세 구간 중 가운데 구간을 반전시키면 세 구간이 이어진다.

교대로 된 구간들의 길이를 구한 뒤, 연속된 세 길이의 합중 최대를 출력하면 된다.

1100101110의 경우 구간들의 길이를 [1, 2, 4, 1, 2]로 구할 수 있고, 답은 1 + 2 + 4 = 7이 된다.

정답 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
N = int(input())
LED = input().split()
A = []

cnt = 1
for i in range(1, N):
    if LED[i] != LED[i-1]:
        cnt += 1
    else:
        A.append(cnt)
        cnt = 1
A.append(cnt)

if len(A) > 2:
    ans = max([A[i-2] + A[i-1] + A[i] for i in range(2, len(A))])
else: ans = sum(A)

print(ans)

댓글남기기