1일1알

백준 16719번 ZOAC C++ 본문

알고리즘

백준 16719번 ZOAC C++

영춘권의달인 2022. 11. 17. 18:52

https://www.acmicpc.net/problem/16719

 

16719번: ZOAC

2018년 12월, 처음 시작하게 된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 앞 글자부터 하나씩 보여주는 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로

www.acmicpc.net

 

재귀

 

#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <list>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <limits.h>

#include <cassert>
#include <utility>

using namespace std;
using int64 = long long;

string str;
vector<bool> visited;

void rec(int left, int right) {
    char minChar = 'z';
    int idx = -1;
    for (int i = left; i <= right; i++) {
        if (visited[i]) continue;
        if (str[i] < minChar) {
            minChar = str[i];
            idx = i;
        }
    }
    if (idx == -1) return;
    visited[idx] = true;
    for (int i = 0; i < visited.size(); i++) {
        if (visited[i] == false) continue;
        cout << str[i];
    }
    cout << "\n";
    rec(idx + 1, right);
    rec(left, idx - 1);
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin >> str;
    visited = vector<bool>(str.length(), false);
    rec(0, str.length() - 1);
}