개발자 크루

[RecurDyn]

취미로 코딩하는 RecurDyn 개발자 모임

Lv.3

썸네일

[HSAT 6회 정기 코딩 인증평가 기출] 염기서열 커버

난이도
3 단계
참가자
0
제출
0
정답률
0.00 %
언어별 시간/메모리
언어별 시간/메모리 표
언어 시간 메모리
JavaScript 2초 1024MB
C 1초 1024MB
C++ 1초 1024MB
Java 2초 1024MB
Python 2초 1024MB

생명 공학을 연구하는 찬홍이는 요즘 DNA 염기서열을 연구하고 있다. DNA 염기서열이란 4종류의 핵염기 a(아데닌), c(사이토신), g(구아닌), t(티민)이 일자로 연결된 가닥이다. 문자열로는 a, c, g, t 네 문자의 나열로 나타낸다.


찬홍이는 인간에게 좋게 작용하는 좋은 염기서열 N개를 가지고 있고 이 모든 좋은 염기서열의 길이는 M이다. 주어진 좋은 염기서열은 몇 개의 와일드 카드(.)를 가지고 있어, 이 부분에는 a, c, g, t의 어떤 염기가 들어가도 좋은 염기서열로 작용한다고 하자.


주어진 좋은 염기서열의 조건을 만족할 수 있는 염기서열을 초염기서열이라고 한다. 그러나 주어진 모든 좋은 염기서열을 만족하는 것은 불가능할 수 있어서, 여러 초염기서열을 만들어서 여러 그룹의 좋은 염기서열을 커버할 수 있도록 하고자 한다.

주어진 모든 좋은 염기서열을 커버하기 위해 필요한 최소 갯수의 초염기서열은 몇 개일까?

제약조건

* 1 ≤ N ≤ 15

* 1 ≤ M ≤ 20
* 주어지는 염기서열의 길이는 M이다.
* 염기서열은 'a','c', 'g', 't', '.'으로 이루어져 있다.

입력형식

첫 번째 줄에는 좋은 염기서열의 개수과 그들의 길이 N, M이 주어진다.
다음 N개의 줄의 각 줄에는 좋은 염기서열이 주어진다.

출력형식

첫 번째 줄에 모든 염기서열을 커버하기 위한 초염기서열의 최소 갯수를 출력한다.

입력예제1

4 5 a..tt gc... a.g.t .c.ag

출력예제1

2

입력예제2

4 1 a g c t

출력예제2

4

입력예제3

4 4 a... .c.. ..g. ...t

출력예제3

1