BOJ/정렬

[C/C++] 백준 - 11536번 : 줄 세우기

JWonK 2022. 5. 14. 15:50
728x90
반응형

https://www.acmicpc.net/problem/11536

 

11536번: 줄 세우기

이름이 증가하는 순으로 나타나면 INCREASING, 감소하는 순이면 DECREASING을 한 줄에 출력한다. 만약 위의 두 경우가 아니라면 NEITHER를 출력한다.

www.acmicpc.net

문제

악독한 코치 주혁은 선수들을 이름 순으로 세우는 것을 좋아한다. 더 악독한 것은 어떤 순서로 서야할지도 알려주지 않았다! 선수들의 이름이 주어질 때 어떤 순서로 이루어져있는지 확인해보자.


 

단순한 문제이다.

주어진 문자열들이 오름차순으로 정렬되어있는 상태인지, 내림차순으로 되어있는 상태인지, 두 상태 모두 해당 안되는지 확인만 해주면 되는 문제이다.

 

vector에 문자열로 입력받은 것을 C++의 algorithm헤더파일에서 제공하는 sort를 이용하면 default값으로 오름차순 정렬을 수행해준다. 하나의 또 다른 벡터를 임시적으로 복사받아 정렬을 수행한 후 결과를 확인만 해주면 된다.

#include <iostream>
#include <queue>
#include <vector>
#include <stack>
#include <string>
#include <cstring>
#include <set>
#include <map> 
#include <algorithm>
#include <cmath>
#include <ctime>
#define fastio ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define ENDL cout << endl
#define ll long long
#define ull unsigned long long
#define INF 987654321
#define Mod 1000000009
#define endl '\n'
#define pil pair<int,int>

using namespace std;

vector<string> input() {
	int N;
	cin >> N;
	vector<string> name;
	for (int i = 0; i < N; i++) {
		string s; cin >> s;
		name.push_back(s);
	}
	return name;
}

string solution(vector<string>& name) {
	int index = 0;
	vector<string> temp = name;
	sort(temp.begin(), temp.end());

	bool isIncreasing = false;
	for (int i = 0; i < temp.size(); i++) {
		if (name[i] != temp[i]) {
			isIncreasing = true;
			break;
		}
	}
	if (!isIncreasing) return "INCREASING";

	bool isDecreasing = false;
	for (int i = temp.size() - 1; i >= 0; i--) {
		if (name[index++] != temp[i]) {
			isDecreasing = true;
			break;
		}
	}
	if (!isDecreasing) return "DECREASING";

	return "NEITHER";
}

int main() {
	fastio;
	vector<string> name = input();
	cout << solution(name) << endl;

	return 0;
}
728x90
반응형