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

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

생체의공학

면접 대비

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

요약
목표 문자열과 재사용 가능한 조각 문자열들이 주어질 때, 조각들을 이어 붙여 목표 문자열을 만들 수 있는 최소 조각 수를 구하거나 불가능함을 판정한다.
난이도

보통10점 중 5점

유형
동적 계획법, 문자열, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

생체의공학은 생물학적 현상을 이용하여 아주 작은 규모에서 약물이나 다른 물질을 설계하려는 분야이다. 새로운 약물을 설계할 때 중요한 점은, 약물이 몸속의 올바른 수용체 세포에 결합하여 특정 반응을 일으키거나 억제하도록 만드는 것이다. 실제 생물학은 매우 복잡하므로, 여기서는 다음과 같이 단순화한 모형을 사용한다.

결합 부위(docking site)는 nn개의 문자로 이루어진 문자열 zz로 나타내며, 이는 연속한 nn개 위치의 화학적 성질을 뜻한다. 우리는 주어진 기본 구성 요소들을 이어 붙여 이 부위에 결합하는 문자열을 조립하려고 한다. 구성 요소로는 mm개의 문자열 y1,y2,…,ymy_1, y_2, \dots, y_m이 주어지며, 각 yiy_i는 nin_i개의 문자로 이루어져 있다. 목표는 이 구성 요소들을 순서대로 골라 이어 붙였을 때 그 결과가 zz와 정확히 같아지도록 하는 것이다. 각 구성 요소의 공급량은 무제한이므로, 같은 yiy_i를 원하는 만큼 여러 번 사용할 수 있다.

입력

첫째 줄에 데이터 집합의 개수를 나타내는 정수 K≥1K \ge 1이 주어진다. 이어서 KK개의 데이터 집합이 다음 형식으로 주어진다.

  • 데이터 집합의 첫째 줄에는 사용할 수 있는 구성 요소 문자열의 개수 mm (1≤m≤1001 \le m \le 100)이 주어진다.
  • 둘째 줄에는 문자열 zz가 주어진다. zz의 길이는 11 이상 10001000 이하이며, 대소문자 영문자로만 이루어진다.
  • 다음 mm개의 줄에는 각각 구성 요소 문자열 yiy_i가 하나씩 주어진다. 각 yiy_i의 길이는 11 이상 10001000 이하이며, 대소문자 영문자로만 이루어진다.

문자열 비교는 대소문자를 구분한다.

출력

각 데이터 집합마다 먼저 Data Set x:를 한 줄에 출력한다. 여기서 xx는 데이터 집합의 번호이며 11부터 시작한다. 그다음 줄에는 zz를 조립하는 데 필요한 구성 요소의 최소 개수를 출력한다. 만약 zz를 조립할 수 없다면 대신 Impossible을 출력한다.

예제3

  1. 예제 1

    입력
    2
    4
    acgaagaacga
    acg
    gaa
    ac
    cga
    3
    aaaaaaaat
    aaaaa
    at
    aaa
    
    예상 출력
    Data Set 1:
    4
    Data Set 2:
    Impossible
    
  2. 예제 2

    입력
    1
    2
    abcabc
    abc
    ab
    
    예상 출력
    Data Set 1:
    2
    
  3. 예제 3

    입력
    1
    1
    aaaa
    a
    
    예상 출력
    Data Set 1:
    4