정화 코딩

[C++] 엘리스 알고리즘 코드 챌린지 7/8 : 목표량 본문

PS

[C++] 엘리스 알고리즘 코드 챌린지 7/8 : 목표량

jungh150c 2024. 7. 8. 23:22

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

string str;
int n;
string res;
bool fin = false;
vector<int> a;
vector<bool> chk;

void dfs(int idx) {
    if (fin) {
        return;
    }
    if (idx == n) {
        if (res > str) {
            for (char c: res) {
                cout << c;
            }
            cout << '\n';
            fin = true;
        }
        return;
    }
    for (int i = 0; i < n; i++) {
        if (!chk[i]) {
            chk[i] = true;
            res.replace(idx, 1, to_string(a[i]));
            dfs(idx + 1);
            if (fin) break;
            chk[i] = false;
        }
    }
}

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

    cin >> str;
    res = str.substr();
    n = str.size();
    chk = vector<bool>(n);

    for (char c: str) {
        a.push_back(c - '0');
    }

    sort(a.begin(), a.end());

    dfs(0);
}

분명 다른 더 좋은 방법이 있을 것 같은데 안 떠올라서 결국 그냥 백트래킹으로 풀었다. 당연히 시간 초과 날 줄 알았는데 이게 왜 되지..?? 암튼 여행 와있지만 숙소에서 노트북으로 11시 20분에 마무리ㅠㅠ!!

(추가) next_permutation을 쓰면 날먹으로 풀 수 있다고 한다.

 

 

'PS' 카테고리의 다른 글

[C++] Gazzzua (백준 17939번)  (0) 2024.07.21
[C++] 셀프 넘버 (백준 4673번)  (0) 2024.07.15
[C++] 선물 (백준 1166번)  (0) 2024.07.07
[C++] AC (백준 5430번)  (0) 2024.07.04
[C++] 사각형 게임 (Small) (백준 25046번)  (0) 2024.07.04
Comments