본문 바로가기
백준 문제 풀이 & C++ 공부

백준 2529 C++

by daisy0461 2024. 10. 19.

이 문제도 생각하는 방식은 간단하다.

<, >에 둘 다 사용할 수 있도록 재귀함수를 만들어주면 된다.

#include <bits/stdc++.h>

using namespace std;

bool bIsFindResult = false;
int bodingNum;
int usedNum[10];
vector<int> result;
vector<bool> vIsFindBigger;

void FindResult(int num, int index)
{
	usedNum[num] = 1;
	if (index == bodingNum && bIsFindResult == false) {
		//cout << "Find Result \n";
		for (int i : result) {
			cout << i;
		}
		cout << "\n";

		bIsFindResult = true;
		return;
	}

	if (bIsFindResult) return;

	if (vIsFindBigger[index]) {		//지금 num보다 더 큰 값을 찾는다.
		for (int i = num + 1; i < 10; i++) {
			if (usedNum[i]) continue;

			result.push_back(i);
			FindResult(i, index + 1);
			result.pop_back();
		}
	}
	else {
		for (int i = num - 1; i >= 0; i--) {
			if (usedNum[i]) continue;

			result.push_back(i);
			FindResult(i, index + 1);
			result.pop_back();
		}
	}

	usedNum[num] = 0;
}

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

	cin >> bodingNum;

	char temp;
	for (int i = 0; i < bodingNum; i++) {
		cin >> temp;
		if (temp == '<') {
			vIsFindBigger.push_back(true);
		}
		else if (temp == '>') {
			vIsFindBigger.push_back(false);
		}
	}

	for (int i = 9; i >= 0; i--) {
		result.push_back(i);
		FindResult(i, 0);
		result.pop_back();

		if (bIsFindResult) break;
	}

	result.clear();
	bIsFindResult = false;
	fill(&usedNum[0], &usedNum[0] + 10, 0);

	for (int i = 0; i < 10; i++) {
		result.push_back(i);
		FindResult(i, 0);
		result.pop_back();

		if (bIsFindResult) break;
	}
}

'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글

백준 15662 C++  (0) 2024.11.20
백준 14891 C++  (1) 2024.11.19
백준 1987 C++  (1) 2024.10.18
백준 14889 C++  (1) 2024.07.10
백준 1931 C++  (0) 2024.07.01