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

문제 4352 · 바이트 II

지원 요청 입력 기록

인증 제출 통계 · 5분마다 갱신 · 정답 비율 = 정답 제출 / 전체 제출
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1000ms / 테스트 (언어별 보정은 아래 표)메모리: 측정하지 않음(브라우저 채점)0000.00%

문제

사내 IT 지원 창구는 간단한 문자 입력기로 요청 이름을 받는다. 이 입력기는 글자를 추가하거나 지운 기록과 제출 명령을 하나의 문자열에 차례대로 저장한다. 관리자는 이 문자열을 재생하여 실제로 제출된 요청 이름별 횟수를 구하려 한다. 재생을 시작할 때 작성 중인 요청 이름은 빈 문자열이다. 입력 기록은 영문 소문자, 숫자, 그리고 세 특수 문자 #, |, 역슬래시로 이루어진다. 영문 소문자나 숫자를 읽으면 작성 중인 이름의 맨 뒤에 그대로 붙인다. 특수 문자 #을 읽으면 작성 중인 이름의 마지막 문자 하나를 지운다. 이름이 비어 있다면 아무 일도 일어나지 않는다. 지워지는 문자는 종류와 관계없이 마지막 문자 하나다. 특수 문자 |를 읽으면 현재 이름을 제출하고 작성 중인 이름을 빈 문자열로 바꾼다. 다만 현재 이름이 비어 있으면 제출 횟수를 늘리지 않고 빈 상태를 유지한다. 같은 이름을 여러 번 제출할 수 있으며, 그때마다 해당 이름의 제출 횟수가 1씩 늘어난다. 역슬래시를 읽었을 때 뒤에 문자가 남아 있으면 바로 다음 문자 하나를 명령으로 해석하지 않고 이름의 맨 뒤에 붙인다. 이때 다음 문자는 이미 처리한 것으로 보며 다시 해석하지 않는다. 따라서 #, |, 역슬래시 자체도 이름에 포함될 수 있다. 역슬래시가 입력 기록의 마지막 문자라면 역슬래시 자체를 이름의 맨 뒤에 붙인다. 입력 기록을 끝까지 읽은 뒤에는 작성 중인 이름을 한 번 더 제출한다. 이때도 빈 이름은 제출하지 않는다. 제출된 서로 다른 이름의 수와 각 이름의 제출 횟수를 구해야 한다. 이름은 문자 순서가 #, 숫자 0부터 9, |, 역슬래시, 영문 소문자 a부터 z인 사전순으로 정렬한다. 한 이름이 다른 이름의 접두사라면 짧은 이름이 먼저다. 제출된 이름이 없으면 서로 다른 이름의 수를 나타내는 0만 출력한다.

입력

첫째 줄에 입력 기록의 길이 N이 주어진다. N은 1 이상 100,000 이하의 정수다.
둘째 줄에 길이가 정확히 N인 입력 기록 S가 주어진다. S는 영문 소문자 a~z, 숫자 0~9, #, |, 역슬래시로만 이루어지며 공백은 없다.

출력

첫째 줄에 제출된 서로 다른 이름의 수 M을 출력한다. 다음 M개 줄에 이름과 제출 횟수를 공백으로 구분하여 지정한 사전순으로 출력한다. 이름 안의 특수 문자는 역슬래시를 추가하지 않고 그대로 출력한다. M이 0이면 추가 줄을 출력하지 않는다.

예제 입력 1

20
pc1|pc2#1|net\|a|pc1

예제 출력 1

2
net|a 1
pc1 3

예제 입력 2

5
##||#

예제 출력 2

0

예제 입력 3

8
\#|a|ab\

예제 출력 3

3
# 1
a 1
ab\ 1
힌트 펼치기
  • 작성 중인 이름을 문자 배열에 저장하면 마지막 문자를 쉽게 지울 수 있다.
  • 역슬래시 뒤에서 문자로 처리한 기호는 명령으로 다시 실행하지 않는다.

관련 서재 장

관련 장

출처: Devin.KR 자체 제작

알고리즘 분류문자열스택정렬

풀이 작성

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

Python 기본 시간 제한 = 문제 시간 제한 × 3 + 2초. 문제별 예외는 아래 표에 반영됩니다. 표준 라이브러리만 지원합니다.

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

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

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

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

    이 브라우저의 연습 기록

      언어별 제한

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

      언어엔진(버전)시간 제한메모리
      javascript사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름)1000ms / 테스트측정하지 않음(브라우저 채점)
      pythonPyodide 314.0.7 (CPython 3.14 WASM)5000ms / 테스트측정하지 않음(브라우저 채점)