문제 4113 · 바이트 III
주문 원장의 첫 정상 기록
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
온라인 쇼핑몰의 데이터 담당자는 여러 수집 경로에서 모인 주문 기록을 하나의 원장으로 정리하고 있다. 같은 주문이 여러 번 도착할 수 있고, 일부 필드에는 잘못된 값이 들어 있다. 각 기록에는 주문 번호, 상품 코드, 수량, 단가가 차례대로 들어 있다. 기록의 도착 순서는 입력 순서와 같다. 주문 번호 자체는 항상 정해진 형식을 지키지만, 나머지 세 필드는 검증해야 한다. 상품 코드는 영문자 두 글자 뒤에 숫자 두 글자가 붙은 정확히 네 글자여야 한다. 영문자는 대문자와 소문자를 모두 허용한다. 정상인 상품 코드는 영문자를 모두 대문자로 바꾸어 사용한다. 따라서 ab07과 AB07은 같은 상품을 나타낸다. 영문자나 숫자의 위치가 다르거나 글자 수가 다르면 잘못된 상품 코드이다. 수량과 단가는 각각 숫자 0부터 9까지만 사용한 문자열이어야 한다. 앞에 붙은 0은 허용하며, 문자열 전체를 십진수 정수로 해석한다. 해석한 수량은 1 이상 99 이하이고, 단가는 1 이상 1000000 이하여야 한다. 부호나 영문자가 들어 있으면 숫자로 해석하지 않는다. 상품 코드, 수량, 단가 중 하나라도 조건을 어기면 그 기록 전체를 오류 기록으로 분류한다. 각 기록은 먼저 필드 검증을 수행한다. 오류 기록은 주문 번호가 앞에서 등장했는지와 관계없이 오류로만 세며, 해당 주문 번호를 사용한 것으로 표시하지 않는다. 검증을 통과한 기록은 같은 주문 번호로 이미 채택한 기록이 있는지 확인한다. 있으면 중복 기록으로 분류하고, 없으면 채택한다. 즉, 주문 번호마다 처음으로 검증을 통과한 기록 하나만 채택한다. 이미 채택한 주문 번호의 뒤에 오류 기록이 오더라도 그 기록은 중복이 아닌 오류로 센다. 채택한 기록만 사용하여 상품별 총수량과 총매출을 계산한다. 한 기록의 매출은 수량과 단가의 곱이다. 정상화한 상품 코드가 같은 기록을 합산하고, 상품 코드를 사전순으로 정렬해 출력한다. 먼저 채택, 오류, 중복 기록 수를 각각 보고한 뒤 집계표를 출력한다. 채택한 기록이 하나도 없으면 상품 수를 0으로 출력하고 집계 행은 출력하지 않는다.
입력
첫째 줄에 기록 수 N이 주어진다. N은 1 이상 10000 이하인 정수이다. 다음 N개 줄에 주문 번호, 상품 코드 문자열, 수량 문자열, 단가 문자열이 공백으로 구분되어 주어진다. 주문 번호는 영문 대문자 또는 숫자로 이루어진 정확히 6글자이다. 나머지 각 문자열은 길이가 1 이상 9 이하이며, 영문 대문자, 영문 소문자, 숫자, +, - 중에서만 구성된다. 필드 안에는 공백이 없다. 필드의 정상 여부는 지문의 검증 규칙으로 판단한다. 모든 문자는 ASCII 문자이다.
출력
첫째 줄에 채택 기록 수, 오류 기록 수, 중복 기록 수를 이 순서대로 공백으로 구분하여 출력한다. 둘째 줄에 채택한 기록에 등장하는 서로 다른 상품 수 M을 출력한다. 다음 M개 줄에 정상화한 상품 코드, 총수량, 총매출을 공백으로 구분하여 출력한다. 행은 상품 코드의 ASCII 사전순으로 정렬한다. 모든 수는 불필요한 앞자리 0 없이 십진수 정수로 출력한다.
예제 입력 1
7 OR0001 ab07 02 150 OR0001 AB07 3 200 OR0002 xy10 0 90 OR0002 Xy10 4 025 OR0003 a707 1 100 OR0004 AB07 1 200 OR0001 AB07 +2 150
예제 출력 1
3 3 1 2 AB07 3 500 XY10 4 100
예제 입력 2
3 000001 AA00 00 10 000001 A000 1 10 000002 ZZ99 1 -1
예제 출력 2
0 3 0 0
예제 입력 3
4 AA0001 zz99 099 1000000 AA0001 zz99 100 2 AA0002 ZZ99 1 000000001 AA0002 ab00 1 1
예제 출력 3
2 1 1 1 ZZ99 100 99000001
힌트 펼치기
- 필드 검증에 실패한 기록은 주문 번호를 저장하지 않는다.
- 검증을 통과한 뒤 주문 번호 집합으로 중복을 판단하고, 채택한 기록만 상품별로 누적한다.
알고리즘 분류
문자열데이터 정제해시정렬풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |