← 실전 문제

이어 놓을 수 있는 배치 수

C++빈칸 채우기

서로 구분되는 부품을 모두 한 줄로 배치해요. 인접한 두 부품의 크기 차이는 limit 이하여야 해요. 크기가 같아도 원래 위치가 다른 부품은 서로 다른 물품이에요. 조건에 맞는 전체 배치 순서의 수를 구해요. 제공된 재귀 함수가 후보를 탐색해요.

int solution(vector<int> sizes, int limit)가 요구한 값을 반환하도록 빈칸을 채워 주세요.

매개변수와 반환값

sizes의 길이는 17, 각 크기는 020, limit는 020이에요. 모든 부품을 정확히 한 번 사용해요. 반환값은 조건을 만족하는 순서 수로 05,040이에요. 처음 부품 앞과 마지막 부품 뒤에는 다른 부품이 없어요.

예시

  1. sizes={1, 2, 3}, limit=1이면 2를 반환해요. 1→2→3과 3→2→1의 두 순서가 가능해요.
  2. sizes={2, 2, 2}, limit=0이면 6를 반환해요. 크기는 같아도 세 부품을 구분하므로 3×2×1인 여섯 순서가 가능해요.

실행용 입출력

첫 줄에 부품 수 n limit, 다음 줄에 크기 n개를 입력해요. main은 입력을 매개변수로 바꾸고 반환값을 출력하는 채점 하네스예요. 풀이 대상은 solution과 제공된 보조 함수의 빈칸이에요.

예시 입력

3 1
1 2 3

예상 결과

2

예시 입력

3 0
2 2 2

예상 결과

6
핵심 개념
  • brute-force: 제한된 후보를 빠짐없이 검사해요.
  • function-design: 보조 함수의 인자와 반환 계약을 연결해요.
  • stl-vector: 벡터의 크기와 인덱스로 매개변수를 읽어요.

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

로그인하고 풀기