아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

잊어버린 비밀번호

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

요약
일부 글자와 물음표로 주어진 길이 L 패턴에 맞으면서 사전 단어들의 연결로 만들 수 있는 문자열 중 사전순으로 가장 앞선 것을 찾는다.
난이도

보통10점 중 7점

유형
동적 계획법, 문자열, 그리디, 트라이
정답자
아직 제출이 없습니다

문제

Bessie는 자신의 비밀번호를 잊어버렸지만, 비밀번호에 대한 몇 가지 유용한 사실은 기억하고 있다.

비밀번호 PP는 소문자 로마자로 이루어진 길이 LL의 문자열이다(1≤L≤10001 \le L \le 1000). 이 비밀번호는 사전에 있는 서로 다른 NWNW개의 단어(1≤NW≤10001 \le NW \le 1000) 중 하나 이상을 이어 붙여 만들 수 있으며, 같은 단어를 여러 번 사용해도 된다. 사전의 각 단어는 길이가 11 이상 2020 이하인 소문자('a'부터 'z'까지)의 나열이다.

Bessie는 비밀번호의 일부 글자와 그 위치도 기억하고 있다. 이 부분 정보는 길이 LL의 문자열로 주어지며, 각 자리에는 기억하는 정확한 글자가 있거나, 기억하지 못하는 자리라면 ? 문자가 있다.

사전과 Bessie가 기억하는 부분 정보가 주어질 때, 다음 두 조건을 모두 만족하는 비밀번호를 찾아라.

  • 기억하는 위치에는 기억하는 글자가 정확히 놓여 있다(? 자리에는 임의의 소문자가 올 수 있다).
  • 사전의 단어를 하나 이상 이어 붙인 문자열이다.

두 조건을 모두 만족하는 비밀번호가 여러 개라면 사전순으로 가장 작은 것을 출력한다. 유효한 비밀번호가 적어도 하나 존재함이 보장된다.

입력

  • 첫째 줄: 공백으로 구분된 두 정수 LL과 NWNW.
  • 둘째 줄: Bessie가 기억하는 부분 정보를 나타내는 길이 LL의 문자열. 기억하는 자리는 소문자, 기억하지 못하는 자리는 ?이다.
  • 셋째 줄부터 NW+2NW+2째 줄까지: i+2i+2째 줄에는 사전의 ii번째 단어 WiW_i가 주어진다.

출력

  • 부분 정보와 일치하면서 사전의 단어들을 이어 붙여 만들 수 있는, 사전순으로 가장 작은 비밀번호를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    15 6
    a??l?ban???????
    apple
    cow
    farmer
    banana
    bananas
    pies
    
    예상 출력
    applebananapies
    
  2. 예제 2

    입력
    5 5
    app?y
    apple
    apply
    app
    le
    ly
    
    예상 출력
    apply