← 실전 문제

변화 폭을 제한한 지그재그

C++빈칸 채우기

연속된 부분 배열에서 이웃 값의 차이가 양수·음수로 번갈아 나타나야 해요. 각 차이의 절댓값은 limit 이하여야 하고, 같은 값이 이웃하면 조건에 맞지 않아요.

int solution(vector<int> values, int limit)가 이 조건을 만족하는 가장 긴 연속 부분 배열의 길이를 반환하도록 두 빈칸을 채워 주세요. 길이 3 이상만 인정하며 해당 구간이 없으면 0이에요.

배열 길이는 0100, 각 값과 limit는 0100이에요. 값은 중복될 수 있고 배열은 비어 있을 수 있어요. 최대 길이를 만드는 구간이 여러 개면 길이만 반환해요. 반환형은 int예요.

예시 1: values = {1, 3, 2, 4, 3, 5}, limit = 3 → 6. 차이 +2, -1, +2, -1, +2가 번갈아 나오며 모두 제한 안이에요.

예시 2: values = {1, 3, 2, 7, 6}, limit = 2 → 3. 처음 세 값은 조건에 맞지만 2→7은 차이가 5여서 앞 구간을 이어 갈 수 없어요.

실행 입력은 N limit와 값 N개예요. N=0이면 값 줄은 없어도 돼요. main은 하네스이며 반환 길이를 출력해요.

예시 입력

6 3
1 3 2 4 3 5

예상 결과

6

예시 입력

5 2
1 3 2 7 6

예상 결과

3
핵심 개념
  • dp-1d: 이전 상태의 의미를 고정하고 현재 결과를 계산해요.
  • array-1d: 항목 번호와 상태 인덱스를 구분해요.
  • conditionals: 포함·제외 경계와 상태별 분기를 적용해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기