일반적으로 잠수함 엔진이 작동할 때에 나오는 소리는 잠수함 종류에 따라서 다르다고 한다. 우리는 물 속에서 들리는 소리의 패턴을 듣고서 그 소리가 특정한 잠수함에서 나오는 소리인지 아닌지를 알아내려고 한다.이 문제에서는 잠수함의 소리가 두 종류의 단위소리의 연속으로 이루어져 있고,그 단위 소리를 각각 0 과 1 로 표시한다.
또, 한 특정한 소리의 반복은 ~로 표시한다. 예를 들어 x~ 는 x 과 한번 이상 반복되는 모든 소리의 집합을 말하고,(xyz)~ 는 괄호안에 있는 xyz 로 표현된 소리가 한 번이상 반복되는 모든 소리의 집합을 말한다.
다음의 예를 보자.
또 한 예를 보면 (100 | 11)~ 은 100 과 11 을 마음대로 섞어서 만들 수 있는 모든 소리의 집합을 의미한다. 즉 (100 | 11)~ 에 해당하는 스트링을 집합으로 나타내면 {100,11,10011,11100,100100100,1110011,...} 이 된다.
우리가 식별하고자 하는 잠수함의 엔진소리의 패턴은 다음과 같다.
(100~1~ | 01)~여기에 속하는 소리의 예를 들어보면
1001,01,100001,010101,10000011110101,1001110101,...이다. 다시 말해서 이것은 100~1~ 과 01 을 임의로 섞어서 만들 수 있는 모든 스트링의 집합을 나타낸다.
입력으로 0 과 1 로 구성된 스트링이 주어 질때, 이 스트링이 앞에서 기술된 잠수함의 엔진소리인지 아닌지를 판별하는 프로그램을 작성하라.
입력 10010111 출력 noise 입력 01001011000001 출력 noise 입력 100000000000101 출력 submarine 입력 11111110000 출력 noise 입력 10000001111110101100111101 출력 submarine
출처:한국 정보올림피아드 중고등부 기출