서로 구분되는 부품을 모두 한 줄로 배치해요. 인접한 두 부품의 크기 차이는 limit 이하여야 해요. 크기가 같아도 원래 위치가 다른 부품은 서로 다른 물품이에요. 조건에 맞는 전체 배치 순서의 수를 구해요. 제공된 재귀 함수가 후보를 탐색해요.
int solution(vector<int> sizes, int limit)가 요구한 값을 반환하도록 빈칸을 채워 주세요.
매개변수와 반환값
sizes의 길이는 17, 각 크기는 020, limit는 020이에요. 모든 부품을 정확히 한 번 사용해요. 반환값은 조건을 만족하는 순서 수로 05,040이에요. 처음 부품 앞과 마지막 부품 뒤에는 다른 부품이 없어요.
예시
sizes={1, 2, 3}, limit=1이면2를 반환해요. 1→2→3과 3→2→1의 두 순서가 가능해요.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: 벡터의 크기와 인덱스로 매개변수를 읽어요.