본문 바로가기
PROGRAMMING/[C] Baekjoon Online Judge (BOJ)

[C/Baekjoon] 백준 10871번(4-2) : x보다 작은 수 (+오름차순 정렬)

by PIZA 2024. 12. 31.

10871번: X보다 작은 수

 

 

#include <stdio.h>

int main() {
    int N,X;
    scanf("%d %d",&N,&X);
    
    //배열 받기
    int myary[N];
    int ary2[N];
    int k = 0;
    for(int i = 0; i<N; i++) {
        int a;
        scanf("%d ",&a);
        myary[i] = a;
        //X보다 작은 수 있으면 저장
        if(a<X) {
            ary2[k++] = a;
        }
    }
    
    //출력
    for(int j = 0; j<k; j++) {
        printf("%d ",ary2[j]);
    }
    
    
    
    return 0;
}

 

 

[주목할만한 부분]

차근히 풀면 된다.

다만, 결과 출력을 오름차순으로도 바꾸어 보자.

 

출력 부분만 손보면 될 것이다.

 

오름차순 정렬에는 두 가지 방법이 있는데,

첫 번째는 qsort 함수 사용(퀵 정렬), 

두 번째는 for문 사용(버블 정렬)

이다.

 

1. qsort 함수 사용

최상단에 #include <stdlib.h> 를 추가한다.
qsort (배열의 시작 주소, 배열 요소 개수, 배열 요소 하나 크기, 비교에 필요한 포인터)
//qsort함수를 사용해 오름차순 정렬(퀵 정렬 방식)
qsort(ary2, k, sizeof(int), compare);

//출력
for (int j = 0; j < k; j++) {
    printf("%d ", ary2[j]);
}

 

2. for문 사용

버블 정렬 
방식으로 for문을 통해 양 옆을 비교한다.
시간 복잡도가 O(n^2)로 효율이 떨어지지만, 직관적인 방법으로 유용하게 쓸 수 있다.

//오름차순 정렬
for(int i = 0; i<k-1; i++) {
	for (int j = 0; j<k-i-1; j++) {
    	//버블 정렬(양 옆을 비교해 자리 바꿈을 결정한다.)
    	if (ary2[j] > ary2[j+1] ) {
        	int temp = ary2[i];
            ary2[[j] = ary2[j+1];
            ary2[j+1] = temp;
        }
    }
}

//출력
for(int j = 0; j<k; j++) {
	printf("%d ",ary2[j]);
}