문제 4130 · 바이트 II
택배 라벨 검증 집계
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
택배 분류장의 보안 담당자는 스캐너가 수집한 라벨 기록을 검증한다. 하나의 택배가 여러 번 스캔될 수 있고, 전송 과정에서 내용이 바뀐 기록도 섞여 있다. 담당자는 주어진 순서대로 모든 기록을 확인하여 신규 등록, 중복 스캔, 검증 실패의 세 종류로 분류하려 한다. 각 기록에는 택배 번호, 전송 데이터, 체크섬이 있다. 전송 데이터는 대문자 16진수 문자 여덟 개로 이루어지며, 왼쪽부터 두 문자씩 묶어 네 바이트로 해석한다. 16진수에서 A부터 F까지는 각각 십진수 10부터 15까지를 뜻한다. 예를 들어 0A는 십진수 10이고, FF는 십진수 255이다. 네 바이트의 값을 순서대로 b1, b2, b3, b4라고 할 때 올바른 체크섬은 b1 + 2×b2 + 3×b3 + 4×b4를 256으로 나눈 나머지이다. 기록에 적힌 체크섬도 두 자리 대문자 16진수로 주어진다. 먼저 해당 기록의 체크섬을 검사한다. 계산한 값과 적힌 값이 다르면 검증 실패로 분류하고, 택배 번호를 등록하지 않는다. 값이 같으면 이전에 정상적으로 등록한 택배 번호인지 확인한다. 처음 등장한 번호이면 신규 등록으로 분류하고 그 번호를 등록한다. 이미 등록한 번호이면 중복 스캔으로 분류한다. 중복 여부는 택배 번호만으로 판단한다. 같은 번호의 전송 데이터가 서로 달라도 두 기록이 각각 체크섬 검사를 통과했다면 나중 기록은 중복 스캔이다. 반대로 이미 등록한 번호가 적혀 있어도 체크섬이 틀리면 검증 실패이다. 앞서 실패한 기록은 이후 기록의 중복 여부에 영향을 주지 않는다. 세 종류의 기록 수를 집계하라.
입력
첫째 줄에 기록 수 N이 주어진다. 1 ≤ N ≤ 20,000이다. 다음 N개 줄에 택배 번호 P, 전송 데이터 D, 체크섬 H가 공백으로 구분되어 주어진다. P는 1 이상 99,999 이하의 정수이다. D는 정확히 여덟 글자, H는 정확히 두 글자이며, 각 글자는 0부터 9 또는 A부터 F 중 하나이다. 택배 번호에는 불필요한 앞자리 0이 없다.
출력
신규 등록 수, 중복 스캔 수, 검증 실패 수를 이 순서대로 한 줄에 공백으로 구분하여 출력한다. 해당하는 기록이 없으면 그 수는 0이다.
예제 입력 1
6 12 01020304 1E 12 00000000 00 8 01000000 00 8 01000000 01 12 FFFFFFFF 00 8 00000000 00
예제 출력 1
2 2 2
예제 입력 2
3 1 00000000 01 1 00000000 FF 2 FFFFFFFF F6
예제 출력 2
1 0 2
힌트 펼치기
- 16진수 문자열을 두 글자씩 잘라 정수로 바꾼다.
- 체크섬 검사를 통과한 택배 번호만 집합에 저장한다.
알고리즘 분류
문자열집합구현풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |