본문으로 이동
코드패스 by Devin.KR

문제 5254 · 메가 IV

배달 서비스 버전 호환 점검

인증 제출 통계 · 5분마다 갱신 · 정답 비율 = 정답 제출 / 전체 제출
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1000ms / 테스트 (언어별 보정은 아래 표)메모리: 측정하지 않음(브라우저 채점)0000.00%

문제

배달 앱을 운영하는 DevOps 엔지니어가 서버에 설치된 서비스 모듈 N개의 버전 목록을 가지고 있다. 새 배포를 앞두고, 각 모듈이 요구하는 의존성 조건 Q개에 대해 조건을 만족하는 설치 버전이 몇 개인지 세어야 한다. 버전은 점으로 구분된 1개 이상 3개 이하의 비음수 정수로 이루어지며 각 정수는 0 이상 999999 이하이고 0이 아니면 앞에 0이 붙지 않는다. 버전은 숫자로서 왼쪽 성분부터 비교하며, 빠진 성분은 0으로 본다. 따라서 2와 2.0과 2.0.0은 같은 버전이고, 1.10은 1.2보다 크다. 조건은 연산자와 버전을 공백 없이 붙인 문자열이다. >=v, >v, <=v, <v는 각각 v 이상, 초과, 이하, 미만인 버전을 뜻하고 =v는 v와 같은 버전을 뜻한다. ^x.y.z는 x.y.z 이상이고 (x+1).0.0 미만인 버전을, ~x.y.z는 x.y.z 이상이고 x.(y+1).0 미만인 버전을 뜻한다. 이때 ^와 ~에서 빠진 성분은 0으로 채워 해석하며, y+1이 1000000이 되면 그 경계는 (x+1).0.0과 같다고 본다. 설치된 버전 중 같은 버전이 여러 번 나올 수 있고 중복은 각각 센다. 각 조건에 대해 만족하는 설치 버전의 개수를 구하라. 조건을 만족하는 버전이 없으면 0을 출력한다.

입력

첫째 줄에 N과 Q가 공백으로 구분되어 주어진다. 다음 N개의 줄에 설치된 버전이 한 줄에 하나씩 주어진다. 다음 Q개의 줄에 조건이 한 줄에 하나씩 주어진다. 1 ≤ N, Q ≤ 200,000 이다. 조건의 연산자는 >=, >, <=, <, =, ^, ~ 중 하나이다.

출력

각 조건마다 만족하는 설치 버전의 개수를 한 줄에 하나씩 순서대로 출력한다.

예제 입력 1

5 5
1.2.3
1.10
2
1.2.3
0.9.9
>=1.2.3
^1.2
~1.2.3
<1
=2

예제 출력 1

4
3
2
1
1

예제 입력 2

2 3
999999.999999.999999
0
^999999
~0.999999
>0

예제 출력 2

1
0
1
힌트 펼치기
  • 버전을 (major·10^6 + minor)·10^6 + patch 형태의 하나의 정수로 바꾸면 비교가 쉬워진다.
  • 설치 버전 키를 정렬해 두고 이진 탐색의 lower bound와 upper bound로 개수를 센다.
  • ^와 ~는 하한 키와 상한 키를 따로 계산해 두 lower bound의 차이로 구한다. 키는 10^18까지 갈 수 있다.

출처: Devin.KR 자체 제작

알고리즘 분류문자열 파싱정렬이진 탐색구현

풀이 작성

연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.

Python 기본 시간 제한 = 문제 시간 제한 × 3 + 2초. 문제별 예외는 아래 표에 반영됩니다. 표준 라이브러리만 지원합니다.

Ctrl+Enter: 연습 채점 · Tab: 들여쓰기 · Esc 후 Tab: 다음 요소로 이동. 언어별 초안은 이 브라우저에 저장됩니다. JavaScript 입력: require('fs').readFileSync(0, 'utf8'), readline 또는 input().

로그인하면 인증 제출을 사용할 수 있습니다.

풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.

    연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.

    이 브라우저의 연습 기록

      언어별 제한

      테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.

      언어엔진(버전)시간 제한메모리
      javascript사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름)1000ms / 테스트측정하지 않음(브라우저 채점)
      pythonPyodide 314.0.7 (CPython 3.14 WASM)5000ms / 테스트측정하지 않음(브라우저 채점)