기록공간

부등호 (백준 - 2529번) 본문

Algorithm/문제

부등호 (백준 - 2529번)

입코딩 2020. 2. 19. 20:19
반응형

K개의 부등호가 있을때 각각 최대값, 최소값이 되기 위해서는, 최대값은 9부터 9 - k까지, 그리고 최소값은 0부터 0 + k까지 차례대로 가지고 와야한다. 그리고 가지고 온 숫자들의 수열을 이용하여 입력한 부등호가 만족할때 까지 검사하면 각각 부등호에 맞는 최대값, 최소값이 나온다.

 

최대값은 현재 수열의 이전 수열을, 최소값은 현재 수열의 다음 수열을 차례대로 가져오며 검사를 진행해야 한다.

 

코드는 다음과 같다.

#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;

bool check(char* num, char* symbol, int size)
{
	for (int i = 0; i < size; ++i)
	{
		switch (symbol[i])
		{
		case '>':
			if (num[i] < num[i + 1])
				return false;
			break;
		case '<':
			if (num[i] > num[i + 1])
				return false;
			break;
		}
	}

	return true;
}

int main()
{
	int input = 0;
	cin >> input;
	
	char* arr = new char[input];
	for (int i = 0; i < input; ++i)
	{
		cin >> arr[i];
	}

	char* minArr = new char[input + 1 + 1];
	char* maxArr = new char[input + 1 + 1];

	char min = '0';
	char max = '9';
	for (int i = 0; i <= input; ++i)
	{
		minArr[i] = min + i;
		maxArr[i] = max - i;
	}
	minArr[input + 1] = '\0';
	maxArr[input + 1] = '\0';

	// 부등호 조건에 만족할때 까지

	// 최소값
	while (false == check(minArr, arr, input))
	{
    	// 다음 수열로 세팅한다.
		next_permutation(minArr, minArr + (input + 1));
	}

	// 최대값
	while (false == check(maxArr, arr, input))
	{
    	// 이전 수열로 세팅한다.
		prev_permutation(maxArr, maxArr + (input + 1));
	}

	printf("%s\n%s", maxArr, minArr);

	delete[] minArr;
	delete[] maxArr;
	delete[] arr;
}
반응형

'Algorithm > 문제' 카테고리의 다른 글

반도체 설계 (백준 - 2352번)  (0) 2020.02.19
행렬 (백준 - 1080번)  (0) 2020.02.19
기타줄 (백준 - 1049번)  (0) 2020.02.13
신입 사원 (백준 - 1946번)  (0) 2020.02.13
문자열 (백준 - 1120번)  (0) 2020.02.12
Comments