문제 3874 · 바이트 III
천문대 관측망의 접속 지점
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
천문대의 네트워크 담당자는 관측 장비가 사용하는 접속 지점 목록을 점검한다. 각 기록에는 IPv4 주소와 포트 번호가 들어 있다. 기록은 여러 차례 수집한 결과를 이어 붙인 것이므로 같은 주소와 포트가 반복해서 나타날 수 있다. 담당자는 지정한 서브넷에 속하면서 허용 포트 범위도 만족하는 기록만 남긴 뒤, 장비 주소의 수와 접속 지점의 수를 각각 세려고 한다. IPv4 주소는 a.b.c.d 형식으로 나타낸다. 각 부분은 0 이상 255 이하의 정수다. 이 주소를 정수로 바꾼 값은 a×256³+b×256²+c×256+d다. 점검할 서브넷은 기준 주소 A와 접두사 길이 P로 지정한다. B=2^(32-P)라 할 때, 기준 주소를 정수로 바꾼 값을 B로 나눈 몫에 B를 곱한 값을 S라고 한다. 이 서브넷의 전체 주소 범위는 S 이상 S+B-1 이하이다. 기준 주소 A 자체가 범위의 첫 주소일 필요는 없다. 범위의 첫 주소 S는 네트워크 주소이고 마지막 주소 S+B-1은 브로드캐스트 주소다. 이번 점검에서는 두 주소를 장비 주소로 인정하지 않으므로 반드시 제외한다. 나머지 주소 중 포트 번호가 허용 범위 L 이상 U 이하인 기록만 유효하다. 포트 범위의 양 끝은 모두 포함한다. 접두사 길이는 8 이상 30 이하이므로 전체 범위에는 항상 네 개 이상의 주소가 있다. 유효한 기록에서 서로 다른 IPv4 주소의 수가 장비 주소의 수다. 서로 다른 IPv4 주소와 포트 번호의 쌍의 수가 접속 지점의 수다. 같은 주소에 서로 다른 허용 포트가 있으면 장비 주소는 하나지만 접속 지점은 여러 개다. 같은 주소와 같은 포트의 반복 기록은 두 개수 모두 늘리지 않는다. 주어진 기록을 이 규칙으로 처리하여 두 개수를 출력한다. 유효한 기록이 하나도 없으면 두 개수는 모두 0이다.
입력
첫째 줄에 기준 IPv4 주소 A와 정수 P, L, U가 공백으로 구분되어 주어진다. 8 ≤ P ≤ 30이고 1 ≤ L ≤ U ≤ 65,535이다. 둘째 줄에 기록 수 N이 주어진다. N은 1 이상 12,000 이하의 정수다. 다음 N개 줄에 IPv4 주소와 포트 번호가 공백으로 구분되어 주어진다. 포트 번호는 1 이상 65,535 이하의 정수다. 모든 IPv4 주소는 점으로 구분한 네 정수로 이루어진다. 각 부분은 0 이상 255 이하이며, 0 자체를 제외하고 선행하는 0이 없다.
출력
유효한 기록에 나타나는 서로 다른 장비 주소의 수와 서로 다른 접속 지점의 수를 이 순서대로 공백으로 구분하여 한 줄에 출력한다. 유효한 기록이 없으면 0 0을 출력한다.
예제 입력 1
172.20.5.9 29 4000 4001 7 172.20.5.9 4000 172.20.5.9 4000 172.20.5.10 4001 172.20.5.15 4000 172.20.5.8 4000 172.20.5.11 5000 172.20.5.17 4000
예제 출력 1
2 2
예제 입력 2
10.0.0.5 30 80 80 3 10.0.0.4 80 10.0.0.7 80 10.0.0.5 79
예제 출력 2
0 0
예제 입력 3
230.1.2.50 24 10 20 4 230.1.2.50 10 230.1.2.50 20 230.1.2.51 15 230.1.2.50 10
예제 출력 3
2 3
힌트 펼치기
- IPv4 주소를 0 이상 2^32-1 이하의 정수로 바꾸면 서브넷 포함 여부를 정수 비교로 판단할 수 있다.
- 주소를 저장하는 집합과 주소·포트 쌍을 저장하는 집합을 따로 둔다.
알고리즘 분류
문자열집합수학풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |