이분탐색
먼저 문자 범위를 지정하여 그 반경의 최소의 문자를 구한다.
출력한다.
사전순으로 정의하기 위해 최소의 문자 인덱스 +1, 이전 반경의 마지막 범위를 탐색한다.
2의 작업이 끝나면 이번엔 이전 반경의 시작 범위, 최소의 문자 인덱스 - 1 범위를 탐색한다.
2~4의 과정을 모든 작업이 끝날 때 까지 반복한다.
#include <iostream>
using namespace std;
string str;
bool visited[100];
void solve(int st, int ed) {
if(st>ed) return;
int minIdx = ed+1;
char minChar = 'Z'+1;
for(int i=st; i<=ed; i++) {
if(minChar > str[i]) {
minChar = str[i];
minIdx = i;
}
}
visited[minIdx] = true;
string tmp = "";
for(int i=0; i<str.length(); i++)
if(visited[i]) tmp += str[i];
cout << tmp << "\n";
solve(minIdx+1, ed);
solve(st,minIdx-1);
}
int main() {
cin >> str;
solve(0, str.length()-1);
}