← 실전 문제

관측 조건을 만족하는 정수

C++빈칸 채우기

1부터 limit까지의 정수 중 모든 관측 조건을 만족하면서 제외 목록에 없는 값의 개수를 구해요.

rules의 각 행은 [연산 종류, 기준값]이에요. 종류 0은 기준값보다 커야 한다는 조건, 종류 1은 기준값 이하여야 한다는 조건이에요. banned에 적힌 값은 사용할 수 없어요. 같은 제외값이 여러 번 나와도 그 값 하나만 제외해요.

int solution(int limit, vector<vector<int>> rules, vector<int> banned)의 세 빈칸을 채워 주세요. intersect는 모든 관측 조건의 교집합 크기, fits는 한 정수가 모든 조건과 처음 범위에 맞는지 계산해요.

매개변수와 반환값

limit는 11,000이에요. 조건 수와 제외값 수는 각각 0100이에요. 조건 행의 길이는 2, 종류는 0 또는 1, 기준값과 제외값은 0~limit+1이에요. 조건·제외값은 중복될 수 있고 순서는 임의예요. 조건끼리 모순될 수 있어요. 가능한 값이 없으면 0을 반환해요. 두 배열 모두 빈 값일 수 있어요.

예시

  1. limit=10, rules=[[0,3],[1,8]], banned=[4,4,10] → 4: 범위는 4~8의 다섯 개예요. 4는 한 번만 빼고, 범위 밖인 10은 개수에 영향을 주지 않아요.
  2. limit=6, rules=[[0,2],[1,5]], banned=[3,5] → 1: 후보 3·4·5 중 4만 남아요.

자동 채점 입력·출력

첫 줄은 limit, 조건 수 N, 제외값 수 M이에요. 다음 N줄에 종류와 기준값, 다음 줄에 제외값 M개가 있어요. M=0이면 이 줄은 없어도 돼요. 남은 개수를 한 줄에 출력해요. main은 채점용이며 작성 대상은 세 빈칸이에요.

예시 입력

10 2 3
0 3
1 8
4 4 10

예상 결과

4

예시 입력

6 2 2
0 2
1 5
3 5

예상 결과

1
핵심 개념
  • binary-search-range: 포함·제외 경계를 교집합의 양 끝으로 바꿔요.
  • function-design: 범위의 크기와 개별 후보 판정을 구분해요.
  • basic-sort-search: 중복된 제외값을 하나로 정리해요.

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

로그인하고 풀기