순간을 성실히, 화려함보단 꾸준함을

[codeforce Global Round 11]A번 본문

알고리즘,SQL/codeforce 문제

[codeforce Global Round 11]A번

폭발토끼 2020. 10. 11. 10:44

 

codeforces.com/contest/1427/problem/A

 

Problem - A - Codeforces

 

codeforces.com

문제 : 배열 a 가 주어지고 a를 재배열해서 b 배열을 만든다. 이때 조건은 처음부터 순차적으로 더했을때 0이 생기면 안되게 만들어야 된다.

 

해설 : 

1) a의 원소들을 전부 더했을때 0이면 "NO"

2) a의 원소들을 전부 더했을때 0이 아니면 "YES"

   2-1)이때 다 더했을때 0보다 크면 내림차순으로 정렬해주고

   2-2)다 더했을때 0보다 작으면 오름차순으로 정렬해 주면 된다.

=>이렇게 해주면 중간에 0이 발생하는 구간이 생기지 않는다.

#include<bits/stdc++.h>
 
using namespace std;
using ll = long long;
 
void solve();
bool compare(const int a, const int b);
 
int main()
{
	int t;
	cin >> t;
 
	while (t--)
		solve();
}
void solve()
{
	int n, sum=0,arr[55];
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
		sum += arr[i];
	}
	if (sum == 0) {
		cout << "NO\n";
		return;
	}
	cout << "YES\n";
	if (sum > 0)
		sort(arr, arr + n, compare);
	else
		sort(arr, arr + n);
	for (int i = 0; i < n; i++)
		cout << arr[i] << " ";
	cout << "\n";
}
bool compare(const int a, const int b)
{
	return a > b;
}