쉬움
Max Consecutive Ones
코드 라인과 단계 ID를 동기화하고, 변수/포인터/배열·행렬·그래프 엔티티의 상태 스냅샷을 단계마다 갱신한다.
입력
1함수 최대연속1(nums):2 현재 = 0, 최대 = 03 반복 i = 0 … n-1:4 만약 nums[i] = 1:5 현재 = 현재 + 16 최대 = max(최대, 현재)7 아니면: 현재 = 0 // 끊김8 반환 최대
변수
- i
- 0
- nums[i]
- 1
- 현재
- 1
- 최대
- 1
1 / 71이 이어져 현재 연속이 1 이 됩니다.
1이 이어지면 현재 길이를 늘려 최댓값을 갱신하고, 0에서 0으로 되돌린다.
왜 헷갈리는가
가장 단순한 '진행 중 카운터' 패턴이라 쉬워 보이지만, 이 형태가 슬라이딩 윈도우·런 길이 인코딩 등 더 큰 문제의 뼈대가 된다.
핵심 아이디어
현재 연속 길이와 지금까지 최댓값 두 변수를 들고 한 번 훑는다. 조건이 이어지면 늘리고, 끊기면 0으로 리셋한다.
복잡도
시간 O(n)·공간 O(1). 한 번의 스캔으로 끝난다.
실무에서 어디에 쓰나
'가장 긴 연속 구간'은 모니터링·인코딩에서 흔하다.
- 가동/장애: 최장 연속 정상(또는 장애) 구간 측정(uptime/streak)
- 압축: 런 길이 인코딩(RLE)의 연속 구간 길이 계산
- 이상 탐지: 임계 초과가 연속으로 이어진 최장 구간
- 사용자 지표: 연속 출석·연속 성공 같은 streak 계산
흔한 실수
끊길 때 최댓값 갱신을 놓치기(리셋 전에 이미 갱신했으면 안전). 조건을 '1'로 고정하지 말고 일반화 가능.
기억할 것
- 현재·최대 두 변수면 충분.
- 끊기면 0으로 리셋.
- streak·RLE의 기본형.
- 슬라이딩 윈도우의 입문.