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

문제 4723 · 바이트 I

창고 단말기 접속 집계

댓글 0
인증 제출 통계 · 5분마다 갱신 · 정답 비율 = 정답 제출 / 전체 제출
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1000ms측정하지 않음0000.00%

문제

물류 창고의 네트워크 담당자는 작업 단말기가 보낸 접속 기록을 점검하고 있다. 창고에는 이번 점검 대상인 IPv4 서브넷 하나가 지정되어 있으며, 접속을 허용할 포트 번호의 구간도 정해져 있다. 담당자는 기록에 적힌 주소와 포트를 기준으로 유효한 접속 기록의 수와 서로 다른 접속 지점의 수를 집계하려 한다. IPv4 주소 a.b.c.d는 네 정수 a, b, c, d로 표현한다. 이 주소의 정수값은 a×256³+b×256²+c×256+d이다. 점검 대상은 기준 주소 A와 접두사 길이 P로 주어진다. B=2^(32-P)라고 할 때, 네트워크 주소의 정수값 Q는 A의 정수값을 B로 나눈 몫에 B를 곱한 값이다. 대상 서브넷에 속하는 주소의 정수값은 Q 이상 Q+B-1 이하이다. 기준 주소 A 자체가 네트워크 주소일 필요는 없다. 이 창고에서는 네트워크 주소 Q와 마지막 주소 Q+B-1을 단말기에 배정하지 않는다. 따라서 접속 기록의 주소 정수값이 Q보다 크고 Q+B-1보다 작아야 주소 조건을 만족한다. 서브넷 밖의 주소나 두 끝 주소에서 발생한 기록은 집계에서 제외한다. 별도의 특수 주소 규칙은 적용하지 않고, 여기에서 정한 수치 조건만 사용한다. 포트 조건은 허용 구간의 양 끝을 포함한다. 주소 조건과 포트 조건을 모두 만족하는 기록만 유효하다. 같은 주소와 같은 포트가 여러 번 등장하면 유효 기록 수에는 등장한 횟수를 모두 더하지만, 서로 다른 접속 지점 수에는 한 번만 더한다. 주소가 같아도 포트가 다르면 다른 접속 지점이며, 포트가 같아도 주소가 다르면 다른 접속 지점이다. 주어진 기록을 모두 확인한 뒤 유효 기록 수와 서로 다른 유효 접속 지점 수를 출력한다. 유효한 기록이 하나도 없다면 두 수는 모두 0이다.

입력

첫째 줄에 기준 IPv4 주소 A와 정수 P, L, R이 공백으로 구분되어 주어진다. 8≤P≤30, 1≤L≤R≤65,535이다.
둘째 줄에 기록 수 N이 주어진다. 1≤N≤12,000이다.
다음 N개 줄에 IPv4 주소와 포트 번호가 공백으로 구분되어 주어진다. 포트 번호는 0 이상 65,535 이하의 정수이다.
모든 IPv4 주소는 0 이상 255 이하인 정수 네 개를 마침표로 연결한 형식이다. 각 정수에는 값이 0인 경우를 제외하고 앞에 0이 붙지 않는다.

출력

유효 기록 수와 서로 다른 유효 접속 지점 수를 공백으로 구분하여 한 줄에 출력한다. 유효 기록이 없으면 0 0을 출력한다.

예제 입력 1

10.4.2.5 29 8000 8002
7
10.4.2.0 8000
10.4.2.1 8000
10.4.2.1 8000
10.4.2.1 8001
10.4.2.7 8002
10.4.2.6 8003
10.4.2.8 8000

예제 출력 1

3 2

예제 입력 2

192.168.1.10 30 443 443
3
192.168.1.8 443
192.168.1.11 443
192.168.1.9 80

예제 출력 2

0 0
힌트 펼치기
  • IPv4 주소를 하나의 정수로 바꾸면 서브넷 포함 여부를 구간 비교로 확인할 수 있다.

출처: Devin.KR 자체 제작

알고리즘 분류구현해시문자열

풀이 작성

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

JavaScript 시간 제한 = 문제 시간 제한 × 1 + 0초. 문제별 예외는 아래 표에 반영됩니다.

Node.js 전체 API는 지원하지 않습니다.

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

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

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

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

    이 브라우저의 연습 기록

      댓글 0

      로그인하면 댓글을 쓸 수 있습니다.

      댓글 접기·펼치기

      언어별 제한

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

      언어엔진(버전)시간 제한메모리
      JavaScript브라우저 JavaScript1000ms / 테스트측정하지 않음
      TypeScriptTypeScript 5.9.31000ms / 테스트측정하지 않음
      Python 3Pyodide 314.0.7 (CPython 3.14 WASM)5000ms / 테스트측정하지 않음
      CYoWASP Clang 222000ms / 테스트측정하지 않음
      C++YoWASP Clang 22 / libc++2000ms / 테스트측정하지 않음
      JavaOpenJDK javac + TeaVM (Java 21 문법)3000ms / 테스트측정하지 않음
      LuaWasmoon 1.16.0 / Lua 5.43000ms / 테스트측정하지 않음
      RubyRuby 3.4 / ruby.wasm 2.10.15000ms / 테스트측정하지 않음
      SchemeBiwaScheme 0.8.35000ms / 테스트측정하지 않음
      PrologSWI-Prolog / swipl-wasm 8.2.55000ms / 테스트측정하지 않음
      PerlPerl 5.28 / WebPerl 0.09-beta5000ms / 테스트측정하지 않음