DNA 시퀀싱

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

요약
소와 황소의 각 짝에 대해, 두 부모 중 한쪽의 문자와 모든 위치에서 일치하는 다른 소의 수를 센다.
난이도

쉬움10점 중 3점

유형
완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

Farmer John이 자기 소 떼의 혈통을 연구하고 있다. 농장에는 수소 MM마리(1≤M≤201 \le M \le 20)와 암소 FF마리(1≤F≤201 \le F \le 20)가 있지만, 어떤 소가 어떤 소의 자손이 될 수 있는지는 알지 못한다.

다만 농장에 있는 모든 소의 DNA 서열은 알고 있다. 각 DNA 서열의 길이는 25이고, 대문자 A, C, G, T로만 이루어져 있다. Farmer John은 각 (수소, 암소) 쌍에 대해 어떤 소들이 그 둘의 자식이 될 수 있는지 알아내려고 한다.

어떤 소가 특정 수소와 암소의 자식이 되려면 다음 두 조건을 모두 만족해야 한다.

  1. 그 소가 두 부모 중 어느 쪽도 아니다(어떤 소도 자기 자신의 부모가 될 수 없다).
  2. 모든 위치에서 그 소의 DNA 문자가 같은 위치에 있는 두 부모의 문자 중 적어도 하나와 일치한다.

예를 들어 abc는 쌍 (axx, xbc)의 자식이 될 수 있지만, 쌍 (aaa, bbb)의 자식은 될 수 없다.

개념을 설명하기 위한 예로 수소 3마리와 암소 2마리를 생각해 보자.

수소 1: GTTTTTTTTTTTTTTTTTTTTTTTT
수소 2: AATTTTTTTTTTTTTTTTTTTTTTT
수소 3: GATTTTTTTTTTTTTTTTTTTTTTT
암소 1: TTTTTTTTTTTTTTTTTTTTTTTTT
암소 2: ATTTTTTTTTTTTTTTTTTTTTTTT

수소 2와 암소 1은 암소 2의 부모가 될 수 있다. 암소 2의 첫 글자 A는 수소 2에서, 둘째 글자 T는 암소 1에서 올 수 있고, 나머지 글자는 두 부모 어느 쪽에서든 올 수 있기 때문이다.

각 (수소, 암소) 쌍에 대해, Farmer John의 다른 소들 중 그 둘의 자식이 될 수 있는 소가 몇 마리인지 구하라.

입력

  • 첫째 줄: 공백으로 구분된 두 정수 MM과 FF.
  • 둘째 줄부터 M+1M+1번째 줄까지: i+1i+1번째 줄에 수소 ii의 DNA 서열이 주어진다.
  • M+2M+2번째 줄부터 M+F+1M+F+1번째 줄까지: j+M+1j+M+1번째 줄에 암소 jj의 DNA 서열이 주어진다.

출력

MM개의 줄을 출력한다. ii번째 줄에는 공백으로 구분된 FF개의 정수를 출력하며, jj번째 정수는 수소 ii와 암소 jj의 자식이 될 수 있는 소의 수이다.

힌트

예제의 수소 1(TGA...)과 암소 1(ATA...)을 살펴보자. 두 부모 DNA의 핵심은 첫 위치가 {T|A}, 둘째 위치가 {G|T}이고 나머지는 모두 A라는 점이다. 다른 모든 소를 확인해 보면 다음과 같다.

TGA... -- 부모이므로 자식이 될 수 없음
AGA... -- 자식! [TA][GT]에 부합
ATA... -- 부모이므로 자식이 될 수 없음
AAA... -- 둘째 글자 'A'는 'G'나 'T'여야 하므로 자식 아님
TTA... -- 자식! [TA][GT]에 부합

두 마리가 조건을 만족하므로 답 행렬의 첫 원소는 2이다. 나머지 원소도 같은 방식으로 계산한다.

예제1

  1. 예제 1

    입력
    2 3
    TGAAAAAAAAAAAAAAAAAAAAAAA
    AGAAAAAAAAAAAAAAAAAAAAAAA
    ATAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAA
    TTAAAAAAAAAAAAAAAAAAAAAAA
    
    예상 출력
    2 1 0
    0 0 2