문자열 생성 2
면접 대비시간 제한1초메모리 제한128 MB
남은 문자열의 맨 앞이나 맨 뒤 문자를 하나씩 골라 이어 붙일 때 만들 수 있는 가장 사전순으로 작은 문자열을 구한다. 양 끝이 같으면 안쪽을 비교해 결정한다.
문제
개의 문자로 이루어진 문자열 가 주어진다. 이 문자열을 이루는 문자들을 사용하여 새로운 문자열 를 만들려고 한다.
는 가 빌 때까지 다음 두 가지 연산 중 하나를 반복하여 만든다.
- 의 맨 앞(왼쪽 끝) 문자 하나를 꺼내 의 맨 뒤에 붙인다.
- 의 맨 뒤(오른쪽 끝) 문자 하나를 꺼내 의 맨 뒤에 붙인다.
즉, 매 단계마다 아직 남아 있는 의 맨 앞 또는 맨 뒤에서 문자 하나를 골라 의 끝에 이어 붙인다. 이렇게 만들 수 있는 모든 중에서 사전순으로 가장 앞서는(가장 작은) 문자열을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 문자열 의 길이 이 주어진다. ()
다음 개의 줄에 걸쳐 를 이루는 문자가 한 줄에 하나씩 순서대로 주어진다.
출력
만들 수 있는 문자열 중 사전순으로 가장 작은 문자열 를 출력한다.
단, 한 줄에 최대 80글자씩 출력한다. 즉 80글자를 출력할 때마다 줄을 바꾼다.
힌트
예를 들어 ACDBCB인 경우를 살펴보자. 매 단계에서 남아 있는 의 맨 앞 문자와 맨 뒤 문자를 비교하여, 더 작은 문자열을 만드는 쪽의 문자를 에 붙인다. 두 문자가 같으면 안쪽으로 한 글자씩 들어가며 처음으로 달라지는 위치를 비교해 더 작은 쪽 끝을 고른다.
- 맨 앞
A< 맨 뒤B이므로 앞의A를 붙인다. (남은CDBCB,A) - 맨 뒤
B< 맨 앞C이므로 뒤의B를 붙인다. (남은CDBC,AB) - 양 끝이 모두
C이므로 안쪽D와B를 비교하면 뒤쪽이 작다. 뒤의C를 붙인다. (남은CDB,ABC) - 맨 뒤
B< 맨 앞C이므로 뒤의B를 붙인다. (남은CD,ABCB) - 맨 앞
C< 맨 뒤D이므로 앞의C를 붙인다. (남은D,ABCBC) - 남은 문자
D를 붙인다. (남은 없음,ABCBCD)
따라서 답은 ABCBCD이다.