스터디/알고리즘

[알고리즘][C++] Special Sort

y00&z1 2022. 7. 29. 17:35
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
 

//int main(){ 
//	//freopen("input.txt", "rt", stdin);
//	int a[101], n, tmp, i, j, b[101], c[101];
//	scanf("%d", &n);
//	for(i=0; i<n; i++){
//		scanf("%d", &a[i]);
//	}
//	
//	int b_cnt=0, c_cnt=0;
//	for(i=0; i<n; i++){
//		if(a[i]<0) {
//			b[b_cnt]=a[i];
//			b_cnt++;
//		}
//		else if(a[i]>0){
//			c[c_cnt]=a[i];
//			c_cnt++;
//		}
//	}
//
//	for(i=0; i<b_cnt; i++){
//		printf("%d ", b[i]);
//	}
//	for(i=0; i<c_cnt; i++){
//		printf("%d ", c[i]);
//	}
//	return 0;
//}

int main(){ 
	//freopen("input.txt", "rt", stdin);
	int a[101], n, tmp, i, j;
	scanf("%d", &n);
	for(i=0; i<n; i++){
		scanf("%d", &a[i]);
	}
	
	for(i=0; i<n; i++){
		
		for(j=0; j<n-1-i; j++){
			if(a[j]>0 && a[j+1]<0) { //앞이 양수, 뒤가 음수면 swap
				tmp=a[j];
				a[j]=a[j+1];
				a[j+1]=tmp;
			}
		}
	}

	for(i=0; i<n; i++){
		printf("%d ", a[i]);
	}
	return 0;
}

 

음수-양수 순서만 지키고 + 음수끼리/양수끼리의 원래 순서는 그대로 출력되어야 한다 

 

그래서 음수 배열/양수 배열을 선언하고 여기에 삽입하는 식으로 코드를 작성했는데, 

 

이런 방법이 아니라 버블 정렬을 이용해서 인접한 값끼리 비교하여 정렬하면 된다. 

 

j 가 양수, j+1이 음수일 때만  swap!