[백준/C++] 부등호

최대 1 분 소요

부등호

2529

풀이

문자열에 완성된 숫자들을 집어넣고 부등호조건을 만족하는지를 검사하여 MAX와 MIN을 업데이트 시켜주는 코드다. 아직 이때 백트레킹을 잘 못하던 시기였던 것 같다. 문자열을 만드는 과정에서 부등호 조건을 만족시키지 못한다면 바로 반환하도록 하는 것이 더 좋아보인다. 귀찮으므로 생략

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

int k;
string MAX = "0", MIN = "9876543211";
bool visit[10] = {false};
string list ="0123456789";
string ans;
string compare;

bool chk()
{
	for(int i = 0; i < k; ++i) {
		if(compare[i] == '>' && ans[i] < ans[i+1])
			return false;
		if(compare[i] == '<' && ans[i] > ans[i+1])
			return false;
	}
	return true;
}

void permutation(int cnt)
{
	if(cnt == k + 1) {
		if(!chk()) return;
		if(stoll(ans) > stoll(MAX)) MAX = ans;
		if(stoll(ans) < stoll(MIN)) MIN = ans;
		return;
	}

	for(int i = 0; i < 10; ++i) {
		if(visit[i]) continue;
		visit[i] = true;
		ans.push_back(list[i]);
		permutation(cnt + 1);
		visit[i] = false;
		ans.pop_back();
	}
}

int main()
{
	cin >> k;
	for(int i = 0; i < k; ++i) {
		char tmp;
		cin >> tmp;
		compare.push_back(tmp);
	}

	permutation(0);
	
	cout << MAX << "\n";
	cout << MIN;

	return 0;
}

댓글남기기