문제

링크

풀이

#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
vector<char> v;
vector<bool> visited(10, false);
 
inline int c2i(char c) { return c - '0'; }
 
string backtrack1(string s, int k) {
  if (s.length() == k+1) return s;
  for (int i=9; i>=0; i--) {
    if (visited[i]) continue;
    if (s.length() == 0 || (v[s.length()-1] == '<' && c2i(s.back()) < i) || (v[s.length()-1] == '>' && c2i(s.back()) > i)) {
      visited[i] = true;
      string ret = backtrack1(s + to_string(i), k);
      if (ret != "") return ret;
      visited[i] = false;
    }
  }
  return "";
}
 
string backtrack2(string s, int k) {
  if (s.length() == k+1) return s;
  for (int i=0; i<=9; i++) {
    if (visited[i]) continue;
    if (s.length() == 0 || (v[s.length()-1] == '<' && c2i(s.back()) < i) || (v[s.length()-1] == '>' && c2i(s.back()) > i)) {
      visited[i] = true;
      string ret = backtrack2(s + to_string(i), k);
      if (ret != "") return ret;
      visited[i] = false;
    }
  }
  return "";
}
 
void solve(void) {
  int k; cin >> k;
  v.resize(k);
  for (int i=0; i<k; i++) cin >> v[i];
 
  cout << backtrack1("", k) << "\n";
  visited.assign(10, false);
  cout << backtrack2("", k);
}
 
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  solve();
  return 0;
}