//BAEKJOON 1071
//아무리 생각해도 많조분이 아닌데 많조분으로 푸는 나...
#include <stdio.h>
#include <algorithm>
using namespace std;
int n, cnt, arr[1010], idx[55];
int main() {
scanf("%d", &n);
for(int i=0; i<n; i++) {
int k;
scanf("%d", &k);
if(arr[k]==0) {
idx[cnt++]=k;
}
arr[k]++;
}
sort(idx, idx+cnt);
int last=-2;// 수열 마지막 숫자
for(int i=0; i<cnt;) {
int s=idx[i], m=idx[i+1], e=idx[i+2];
int flag=1; //flag : 예외처리 했으면 flag=0
if(i+1==cnt) { //남은 개수
for(int j=0; j<arr[s]; j++) {
printf("%d ", s);
}
flag=0;
i++;
}
else if(i+2==cnt) { //남은 개수 2
if(m-s==1) {
for(int j=0; j<arr[m]; j++) printf("%d ", m);
for(int j=0; j<arr[s]; j++) printf("%d ", s);
}
else if(s-last==1) {
printf("%d ", m); arr[m]--;
for(int j=0; j<arr[s]; j++) printf("%d ", s);
for(int j=0; j<arr[m]; j++) printf("%d ", m);
}
else {
for(int j=0; j<arr[s]; j++) printf("%d ", s);
for(int j=0; j<arr[m]; j++) printf("%d ", m);
}
flag=0;
i+=2;
}
else if(i+3!=cnt) {
if(idx[i+3]-idx[i+2]==1&&idx[i+1]-idx[i]!=1) { //남은 개수 4 이상, 특별한 경우
if(s-last==1) {
printf("%d ", m); arr[m]--;
for(int j=0; j<arr[s]; j++) printf("%d ", s);
for(int j=0; j<arr[m]; j++) printf("%d ", m);
}
else {
for(int j=0; j<arr[s]; j++) printf("%d ", s);
for(int j=0; j<arr[m]; j++) printf("%d ", m);
}
if(arr[m]) last=m;
else last=s;
flag=0;
i+=2;
}
}
if(flag) { //3, 6 이상
if(m-s==1) {
if(e-m==1) { // s, e, m 다 1 차이
if(s-last==1) { //전 숫자랑 1 차이
printf("%d ", m); arr[m]--;
for(int j=0; j<arr[s]; j++) printf("%d ", s);
if(i+4==cnt && idx[i+3]-idx[i+2]==1) {
if(arr[m]) i++;
else i+=2;
last=s;
}
else {
for(int j=0; j<arr[e]; j++) printf("%d ", e);
for(int j=0; j<arr[m]; j++) printf("%d ", m);
if(arr[m]) last=m;
else last=e;
i+=3;
}
}
else {
if(i+3==cnt) {
for(int j=0; j<arr[s]; j++) printf("%d ", s);
for(int j=0; j<arr[e]; j++) printf("%d ", e);
for(int j=0; j<arr[m]; j++) printf("%d ", m);
i+=3;
}
else {
for(int j=0; j<arr[s]; j++) printf("%d ", s);
printf("%d ", e); arr[e]--;
for(int j=0; j<arr[m]; j++) printf("%d ", m);
if(arr[e]) i+=2;
else i+=3;
}
last=m;
}
}
else { // s, m만 1 차이
if(s-last==1) { //전 숫자랑 1 차이
if(i+4==cnt && idx[i+3]-idx[i+2]==1) {
printf("%d ", m); arr[m]--;
for(int j=0; j<arr[s]; j++) printf("%d ", s);
if(arr[m]) {
printf("%d ", e); arr[e]--;
for(int j=0; j<arr[m]; j++) printf("%d ", m);
if(arr[e]) i+=2;
else i+=3;
}
else {
i+=2;
}
last=m;
}
else {
printf("%d ", m); arr[m]--;
for(int j=0; j<arr[s]; j++) printf("%d ", s);
printf("%d ", e); arr[e]--;
for(int j=0; j<arr[m]; j++) printf("%d ", m);
if(arr[m]) last=m;
else last=e;
if(arr[e]) i+=2;
else i+=3;
}
}
else {
if(i+3==cnt) {
for(int j=0; j<arr[s]; j++) printf("%d ", s);
printf("%d ", e); arr[e]--;
for(int j=0; j<arr[m]; j++) printf("%d ", m);
for(int j=0; j<arr[e]; j++) printf("%d ", e);
//7,8,8,10,10 -> 7 10 8 8 10
if(arr[e]) last=e;
else last=m;
i+=3;
}
else {
for(int j=0; j<arr[s]; j++) printf("%d ", s);
printf("%d ", e); arr[e]--;
for(int j=0; j<arr[m]; j++) printf("%d ", m);
last=m;
if(arr[e]) i+=2;
else i+=3;
}
}
}
}
else if(e-m==1) { //m, e만 차이
if(s-last==1) { //전 숫자랑 1 차이
printf("%d ", m); arr[m]--;
for(int j=0; j<arr[s]; j++) printf("%d ", s);
for(int j=0; j<arr[e]; j++) printf("%d ", e);
for(int j=0; j<arr[m]; j++) printf("%d ", m);
if(arr[m]) last=m;
else last=e;
i+=3;
}
else {
for(int j=0;j<arr[s]; j++) printf("%d ", s);
if(i+3==cnt) { //3개
for(int j=0; j<arr[e]; j++) printf("%d ", e);
for(int j=0; j<arr[m]; j++) printf("%d ", m);
i+=3;
}
else {
for(int j=0; j<arr[m]; j++) printf("%d ", m);
i+=2;
}
last=m;
}
}
else { // s, e, m 다 2 이상
if(s-last==1) { //전 숫자랑 1 차이
printf("%d ", m); arr[m]--;
for(int j=0; j<arr[s]; j++) printf("%d ", s);
for(int j=0; j<arr[m]; j++) printf("%d ", m);
for(int j=0; j<arr[e]; j++) printf("%d ", e);
// (5) 6,6,8,8,8,10 -> 8 6 6 8 8 10
last=e;
}
else {
for(int j=0; j<arr[s]; j++) printf("%d ", s);
for(int j=0; j<arr[m]; j++) printf("%d ", m);
for(int j=0; j<arr[e]; j++) printf("%d ", e);
last=e;
}
i+=3;
}
}
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: