문제 4530 · 바이트 II
자전거 코드 맞추기
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
공유 자전거 보관소에서는 반납된 자전거의 식별 코드를 기록한다. 자전거에 붙인 표찰과 휴대용 입력기의 표시 방식이 달라서, 같은 코드가 서로 다른 모양으로 기록될 때가 있다. 어떤 입력기는 영문자를 대문자로 표시하고 다른 입력기는 소문자로 표시한다. 또한 읽기 편하도록 코드 중간이나 양 끝에 붙인 하이픈이 기록에 포함되기도 한다. 보관소는 기록을 비교하기 전에 다음 규칙으로 표준 코드를 만든다. 먼저 기록에 들어 있는 모든 하이픈 '-'을 제거한다. 그다음 남아 있는 영문 대문자를 대응하는 영문 소문자로 바꾼다. 영문 소문자와 숫자는 그대로 둔다. 문자의 순서를 바꾸거나 숫자 앞의 0을 제거하지 않는다. 예를 들어 기록 'Q-07-a'와 'q07A-'의 표준 코드는 모두 'q07a'다. 반면 'q7a'는 이들과 다른 표준 코드다. 입력에는 반납 기록 N개가 주어진다. 각 기록은 영문 대문자, 영문 소문자, 숫자, 하이픈만으로 이루어지며, 하이픈이 아닌 문자가 적어도 하나 들어 있다. 같은 원문이 여러 번 주어질 수 있고, 한 자전거가 여러 번 반납되어 같은 표준 코드가 반복될 수도 있다. 따라서 모든 기록은 각각 한 번씩 집계해야 한다. 관리자는 서로 다른 표준 코드가 몇 개인지와 가장 많이 기록된 표준 코드를 알고 싶다. 가장 많이 기록된 코드가 여러 개라면 사전순으로 가장 앞선 코드를 선택한다. 사전순 비교에서는 숫자 '0'부터 '9'까지가 먼저 오고, 이어서 영문 소문자 'a'부터 'z'까지가 온다. 한 코드가 다른 코드의 접두사라면 더 짧은 코드가 앞선다. 주어진 기록을 표준화하여 서로 다른 코드 수와 대표 코드 및 그 등장 횟수를 구한다.
입력
첫째 줄에 정수 N이 주어진다. 1 ≤ N ≤ 20,000이다. 다음 N개 줄에 기록이 하나씩 주어진다. 각 기록의 길이는 1 이상 12 이하이며 영문 대문자, 영문 소문자, 숫자, 하이픈 '-'으로만 이루어진다. 각 기록에는 영문자 또는 숫자가 하나 이상 포함된다.
출력
첫째 줄에 서로 다른 표준 코드의 수를 출력한다. 둘째 줄에 가장 많이 등장한 표준 코드와 등장 횟수를 공백으로 구분하여 출력한다. 횟수가 같으면 지문에서 정의한 사전순으로 가장 앞선 코드를 출력한다. N이 1 이상이므로 대표 코드는 항상 존재한다.
예제 입력 1
6 Q-07-a q07A- B-2 b2 Q07A b-3
예제 출력 1
3 q07a 3
예제 입력 2
4 A-1 01 -a1- 0-1
예제 출력 2
2 01 2
예제 입력 3
1 --Z--
예제 출력 3
1 z 1
힌트 펼치기
- 하이픈 제거와 소문자 변환을 마친 문자열을 집계의 키로 사용한다.
- 최대 등장 횟수가 같은 경우 코드 자체를 비교한다.
관련 서재 장
알고리즘 분류
문자열해시풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |