Etaoin Shrdlu

면접 대비

시간 제한1초메모리 제한128 MB

요약
각 시료의 줄을 이어 붙여 인접한 두 문자의 겹치는 쌍을 세고, 가장 자주 나온 다이그램 다섯 개의 횟수와 상대 빈도를 출력한다.
난이도

보통10점 중 4점

유형
문자열, 해시맵, 정렬, 구현
정답자
아직 제출이 없습니다

문제

자연어 텍스트에서 각 문자가 나타나는 상대 빈도는 암호학에서 매우 중요하지만, 그 통계는 언어마다 다릅니다. 다음은 몇몇 주요 언어에서 상대 빈도가 높은 순서로 정렬한 상위 9개 문자입니다.

English: ETAOINSHR
German:  ENIRSATUD
French:  EAISTNRUL
Spanish: EAOSNRILD
Italian: EAIONLRTS
Finnish: AITNESLOK

단일 문자의 빈도만큼이나 중요한 것이 인접한 두 문자 쌍, 즉 다이그램(digram) 의 빈도입니다. 다이그램은 텍스트에서 연속한 두 문자를 말하며, 이 쌍들은 서로 겹칩니다. 즉 같은 문자가 kk개 연속되면 서로 같은 다이그램이 k−1k-1개 만들어집니다. 여러 개의 텍스트 표본이 주어질 때, 상대 빈도가 가장 높은 다이그램들을 구하세요.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스는 텍스트 줄의 개수를 나타내는 정수 nn이 적힌 한 줄로 시작합니다. 그 뒤로 nn개의 줄이 이어지며, 각 줄의 길이는 최대 8080자입니다. 이 nn개의 줄을 줄바꿈 문자를 제외하고 이어 붙이면 분석할 텍스트 표본이 됩니다. 표본은 출력 가능한 ASCII 문자만으로 이루어집니다.

1≤n≤641 \le n \le 64이며, n=0n = 0인 줄이 나오면 입력이 끝나고 그 줄은 처리하지 않습니다.

출력

각 테스트 케이스마다 가장 빈도가 높은 다이그램 5개를 한 줄에 하나씩, 총 5줄로 출력합니다. 각 줄에는 다이그램(두 문자), 공백 한 칸, 등장 횟수(절대 빈도), 공백 한 칸, 그리고 상대 빈도를 차례로 출력합니다. 상대 빈도는 그 다이그램의 등장 횟수를 표본에 있는 전체 다이그램 수로 나눈 값이며, 소수점 아래 6자리로 반올림해 출력합니다.

두 다이그램의 빈도가 같으면 (ASCII) 값이 작은 것을 먼저 출력합니다. 연속한 테스트 케이스의 출력 사이에는 빈 줄을 하나 넣어 구분합니다.

예제1

  1. 예제 1

    입력
    2
    Take a look at this!!
    !!siht ta kool a ekaT
    5
    P=NP
     Authors: A. Cookie, N. D. Fortune, L. Shalom
     Abstract: We give a PTAS algorithm for MaxSAT and apply the PCP-Theorem [3]
     Let F be a set of clauses. The following PTAS algorithm gives an optimal
     assignment for F:
    0
    
    예상 출력
     a 3 0.073171
    !! 3 0.073171
    a  3 0.073171
     t 2 0.048780
    oo 2 0.048780
    
     a 8 0.037209
    or 7 0.032558
    .  5 0.023256
    e  5 0.023256
    al 4 0.018605