1~limit의 정수 중 관측 조건을 최대 한 개만 어기는 값을 세어요. rules의 각 행은 [종류, 기준값]이에요. 종류 0은 기준값 초과, 종류 1은 기준값 이하 조건이에요. 모든 조건을 만족하는 값도 인정해요.
int solution(int limit, vector<vector<int>> rules)의 두 빈칸을 채워 주세요. interval은 한 조건을 제외한 나머지 조건의 교집합을 구해요. skip=-1이면 아무 조건도 제외하지 않아요.
limit는 1100, 조건 수는 025, 각 행 길이는 2예요. 종류는 0 또는 1, 기준값은 0~limit+1이에요. 같은 조건도 각각 독립적인 조건이므로 둘을 어기면 두 개를 어긴 것으로 세어요. 인정할 값이 없으면 0, 조건이 없으면 limit를 반환해요. 반환형은 int예요.
예시 1: limit = 8, rules = {{0, 2}, {1, 5}, {0, 4}} → 6. 3·4는 마지막 조건만, 5는 모두, 6·7·8은 이하 5 조건만 어겨요.
예시 2: limit = 5, rules = {{0, 4}, {1, 1}} → 2. 1과 5만 한 조건 이하를 어기고 2·3·4는 두 조건을 모두 어겨요.
실행 입력은 limit N과 다음 N줄의 두 값이에요. main은 함수 호출용 하네스이며 인정한 정수 개수를 출력해요.
예시 입력
8 3 0 2 1 5 0 4
예상 결과
6
예시 입력
5 2 0 4 1 1
예상 결과
2
핵심 개념
binary-search-range: 가능한 후보 범위와 교집합을 유지해요.function-design: 보조 함수의 계약과 결과 조합을 확인해요.counting-aggregation: 같은 대상이 중복 집계되지 않도록 해요.