단어 추출

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

요약
각 입력 줄을 소문자로 바꾸고 구두점 이웃 규칙에 따라 단어를 잇거나 나눈 뒤 정렬된 고유 단어를 출력합니다.
난이도

보통10점 중 4점

유형
문자열, 정렬, 시뮬레이션
정답자
아직 제출이 없습니다

문제

학생들이 실제로 쓰는 단어를 모아 사전을 만들려고 한다. 과제물, 게시판 글, 이메일에서 가져온 텍스트를 프로그램에 넣어 단어만 뽑아낸다.

같은 단어를 이미 봤는지 쉽게 확인하려면 텍스트를 일정한 형태로 다듬어야 한다. 텍스트 한 줄을 다음 순서로 처리한다.

  1. 대문자는 모두 소문자로 바꾼다.
  2. 알파벳은 a부터 z까지, 숫자는 0부터 9까지다. 공백을 뺀 나머지 글자는 모두 구두점이다.
  3. 구두점의 바로 앞 글자와 바로 뒤 글자가 둘 다 알파벳이면 그 구두점만 지우고 양옆을 붙인다. 그렇지 않으면 구두점을 공백 한 칸으로 바꾼다. 앞뒤를 볼 때는 항상 처리하기 전의 줄을 기준으로 하므로 구두점이 이어져 있어도 서로 영향을 주지 않는다. 줄의 맨 앞이나 맨 뒤에 붙은 구두점은 한쪽에 글자가 없으니 공백이 된다.
  4. 이렇게 만든 문자열을 공백으로 잘라 단어를 얻는다.
  5. 숫자로만 이루어진 단어는 버린다.
  6. 남은 단어를 사전순으로 정렬하고 중복은 하나만 남긴다. 비교는 ASCII 코드값 순서라서 숫자가 알파벳보다 앞에 온다.

가령 haven't는 작은따옴표 양옆이 알파벳이라 havent가 되고, Hartley-Jones.는 hartleyjones가 된다. top-10은 하이픈 뒤가 숫자여서 top과 10으로 갈라지고, 10은 숫자뿐이라 버린다.

입력

입력은 여러 줄로 이루어지고 각 줄이 분석할 텍스트 한 덩어리다. 입력은 # 한 글자만 있는 줄로 끝나며 이 줄은 텍스트가 아니다.

텍스트는 적어도 한 줄 있고, 한 줄의 길이는 250자를 넘지 않는다. 각 줄은 출력 가능한 ASCII 문자, 즉 코드 32번부터 126번까지의 글자로만 이루어진다.

출력

텍스트 한 줄에서 뽑은 단어를 사전순으로 한 줄에 하나씩 출력한다. 텍스트 한 줄이 단어 집합 하나에 대응하고, 이웃한 두 집합 사이에는 빈 줄을 하나 넣는다.

단어가 하나도 남지 않는 줄도 집합 하나로 센다. 그 집합은 아무것도 출력하지 않지만 구분용 빈 줄은 그대로 들어가므로 빈 줄이 연달아 나올 수 있다.

예제2

  1. 예제 1

    입력
    Can I please have the spec for the Programming 3 assignment? B.T.W. I haven't got the lecture notes either!
    Our guest speaker is Mr Hartley-Jones. He shouldn't need any introduction - you all met him last semester, didn't you?
    When you said "give me your best 5 examples", did you mean just from this year - or can we use any? I'd like to use one from2006.
    #
    
    예상 출력
    assignment
    btw
    can
    either
    for
    got
    have
    havent
    i
    lecture
    notes
    please
    programming
    spec
    the
    
    all
    any
    didnt
    guest
    hartleyjones
    he
    him
    introduction
    is
    last
    met
    mr
    need
    our
    semester
    shouldnt
    speaker
    you
    
    any
    best
    can
    did
    examples
    from
    from2006
    give
    id
    just
    like
    me
    mean
    one
    or
    said
    this
    to
    use
    we
    when
    year
    you
    your
    
  2. 예제 2

    입력
    hello world
    42 3.14 007
    Bye!
    #
    
    예상 출력
    hello
    world
    
    
    bye