[C++]백준2529번 부등호

1 minute read

오늘은 백준2529번 부등호 문제를 풀어보도록 하자. DFS를 이용하여 푸는 브루트포스 문제이다.

문제는 다음과 같다.

                               [접근법]

  1. 0~9까지 하나씩 넣고 부등호에 맞게 v에 push하고 boolean배열에 그 수를 true 체크해준다.
  
  2. 만일 그 수가 false고 부등호에 맞게 되었다면 push, boolean배열을 true체크해준 후 dfs로 타고 들어간다.
  
  3. dfs함수가 끝났다면 pop을 해주고 boolean배열도 false로 바꿔준다.
  
  4. answer에 가장 처음의 수가 작고, 끝이 가장 크므로 끝 값과 처음 값을 차례로 출력해준다.
                                     [코드]
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool num[10];
char sign_of_inequality[10];
int N;
vector<int>v;
vector<string>answer;

void dfs(int cnt) {
	if (v.size() == N + 1) {
		string s = "";
		for (int i = 0; i < v.size(); i++) {
			s += v[i] + '0';
		}
		answer.push_back(s);
		return;
	}
	for (int i = 0; i < 10; i++) {
		if (!num[i]) {
			if (sign_of_inequality[cnt] == '>') {
				if (v[cnt] <= i) {
					continue;
				}
			}
			else {
				if (v[cnt] >= i) {
					continue;
				}
			}
		}
		else {
			continue;
		}
		v.push_back(i);
		num[i] = true;
		dfs(cnt + 1);
		num[i] = false;
		v.pop_back();
	}
}

int main() {
	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> sign_of_inequality[i];
	}
	for (int i = 0; i < 10; i++) {
		v.push_back(i);
		num[i] = true;
		dfs(0);
		v.clear();
		num[i] = false;
	}

	cout << answer[answer.size() - 1] << '\n';
	cout << answer[0] << '\n';
	return 0;
}