: ๋ถ๋ฑํธ 2๊ฐ์ ๋ง๋ ์ซ์๋ฅผ ๋ถ๋ฑํธ ํ๋ํ๋์ฉ ๋น๊ตํ๋ฉด์ ์งํํ๋ ค๋ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค๋ ค๊ณ ํ์. ๋ถ๋ฑํธ์ ์ณ์ง ์์ผ๋ฉด, ๋ค์ ๋์๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ก์ง.
but ํ๋ฒ์ ์ซ์ ์ทจํฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ณ๊ฒฝํจ.
๋ง์ฝ ๋ถ๋ฑํธ๊ฐ ์ต๋์ธ 10๊ฐ? ๊ฐ ๋์ค๋ฉด 10! : 360๋ง ์ด๋ฏ๋ก
์ํ์ด ๊ฐ๋ฅํ ์๊ฐ ๋ณต์ก๋ ์ด๋ค.
์กฐํฉ์๋ฃ๋ ์ซ์ ํต์งธ๋ก ๊ฐ์ง๊ณ ์์ ๋น๊ต๋ฅผ ํด๋ ๋จ.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ๋ณด๋ค ์ฝ๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ.
: 10! ์ ์๊ฐ ๋ณต์ก๋๋ 360๋ง ์.
-> ์์ ํ์์ผ๋ก ํ์ด๋ ใฑใ
!
1) ๋ถ๋ฑํธ ์ฒดํฌ ํ๋ ํจ์๋ฅผ ๋งค๋ฒ ํ์ธํ๋ ๋ฐฉ๋ฒ.
2) ๋ฌธ์์ด์ ๋ค ๋ฃ์ด๋ฒ๋ฆฐ ๋ค์์ , ๋ถ๋ฑํธ ์ฒดํฌ๋ฅผ ํ๋ฒ์ ํ๋ ๋ฐฉ๋ฒ
-> 2๋ฒ์ด ํจ์ฌ ํจ์จ์ ์. ํจ์ ํธ์ถ์ ์ค์ผ ์ ์๊ธฐ ๋๋ฌธ์.
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
// ๋ถ๋ฑํธ ์ต๋ 9๊ฐ๋ง ์ฌ์ฉ๊ฐ๋ฅํจ.
// ๋ถ๋ฑํธ ์ฐ์ฐํ ๊ฐ๋ค ์ด 10๊ฐ๊ฐ ์ต๋์.
// ๋ฐฑํธ๋ํน ๋ฐ๋ณต๋ฌธ์์ ๋ค์ ์ธ๋ฑ์ค๋ฅผ ์ง์นญํ๊ธฐ ์ํ.
// ๋ณ์์.
bool check[10];
int n;
vector<string>vv;
// ๋ถ๋ฑํธ ์ปจํ
์ด๋๋ฅผ ์์์ผ ํจ.
bool Result(vector<char>&op , string & word)
{
for (int i = 0; i < word.size() - 1; ++i)
{
if (op[i] == '<')
{
if (word[i] > word[i + 1])
{
return false;
}
}
else if(op[i] == '>')
{
if (word[i] < word[i + 1])
{
return false;
}
}
}
return true;
}
// ์ซ์ ์ค์์ ๋ช๋ฒ์งธ ์ธ๋ฑ์ค์ ์์นํ ๊ฒ์
//์ฒ๋ฆฌํ ๊ฒ์ธ์ง
// ์๋ฅผ ๋ค์ด์ < > ์ด๋ผ๋ฉด ์ซ์๊ฐ 3๊ฐ๋ ์์ผ ํจ.
void backTracking( int index ,string word , vector<char>&op)
{
// ๋ถ๋ฑํธ๊ฐ 2๊ฐ์ผ ๋๋ 3๊ฐ์์ ์คํฑ!
if (index >= n + 1)
{
// string์๋ค๊ฐ ๋ฌธ์์ด ๋ด์๊ฐ์ง๊ณ
// ํ๋ฒ์ ์ฒดํน ํจ์์๋ค๊ฐ ๋์ ธ๊ฐ์ง๊ณ ํ์ธํ๋๋ก ํ์.
if (Result(op, word))
{
//์ ์ญ ๋ฒกํฐ์๋ค๊ฐ ์ ์ฅํด๋์.
vv.push_back(word);
// ์ถ๋ ฅ ํ์ธ์ฉ
//cout << word << endl;
}
return;
}
// 0์์ 9๊น์ง์ ์ซ์๊ฐ ๋ค์ด ๊ฐ์ ์์.
for (int i = 0; i <= 9; ++i)
{
if (check[i])
continue;
check[i] = true;
string temp = to_string(i);
backTracking(index + 1 , word + temp, op);
check[i] = false;
}
}
int main()
{
cin >> n;
vector<char>v(n);
for (int i = 0; i < n; ++i)
{
cin >> v[i];
}
backTracking(0, "", v);
cout << *max_element(vv.begin(), vv.end()) << endl;
cout << *min_element(vv.begin(), vv.end());
}