이웃한 칸의 문자열을 사전순으로 비교해 이어 붙이는 표를 만들고, 마지막 칸 문자열의 지정된 위치부터 50자를 출력한다.
어려움8동적 계획법문자열재귀분할 정복아직 제출이 없습니다시간 제한2초메모리 제한512 MB두 문자열 s와 t가 주어진다. 두 문자열에 쓰인 문자는 모두 서로 다르다. 즉, 같은 문자가 두 번 이상 나오지 않으며, s에 나오는 문자는 t에 나오지 않고 t에 나오는 문자도 s에 나오지 않는다.
s의 길이를 N, t의 길이를 M이라 하자. 2차원 배열 table은 다음과 같이 정의한다.
table[i][0] = s[i-1] (1≤i≤N)table[0][j] = t[j-1] (1≤j≤M)table[i][j] = min(table[i-1][j], table[i][j-1]) + max(table[i-1][j], table[i][j-1]) (1≤i≤N, 1≤j≤M)min은 두 문자열 중 사전 순으로 앞서는 문자열을, max는 사전 순으로 뒤에 오는 문자열을 돌려주는 함수이다. 문자는 ASCII 코드 순서로 비교하므로 숫자가 대문자보다, 대문자가 소문자보다 앞선다. A+B는 문자열 A 뒤에 문자열 B를 이어 붙이는 연산이다.
table[N][M]의 부분 문자열을 구하는 프로그램을 작성하시오. 부분 문자열이 매우 길어질 수 있으므로 pos번째 문자부터 min(50,L−pos)개의 문자만 출력한다. 여기서 L은 table[N][M]의 길이이고, 문자의 위치는 0부터 센다.
첫째 줄에 s, 둘째 줄에 t, 셋째 줄에 pos가 주어진다. (0≤pos<L)
s와 t의 길이는 각각 1 이상 30 이하이며, 알파벳 대문자, 소문자, 숫자로만 이루어져 있다.
첫째 줄에 table[N][M]의 pos번째 문자부터 min(50,L−pos)개의 문자로 이루어진 부분 문자열을 출력한다.