🧠 Algorithm/[C] BOJ

[C언어] 1427번 - 소트인사이드

0_ch4n 2022. 4. 8. 18:24
반응형

문제

배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.

입력

첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.

풀이

그 전까지의 정렬 문제는 숫자를 각각 입력 받아서 배열에 입력할 수 있었지만 이 문제는 숫자를 한 줄에 다 줬기 때문에

우선 string형식으로 받아서 char 배열에 넣어 각 인덱스 당 숫자 하나씩 나눌 수 있었다

그리고 strlen함수를 이용해서 최대 인덱스 값. 즉, 숫자의 개수를 구할 수 있었고

char 배열에 입력 받은 숫자들을 48을 빼서 int형으로 다시 바꿔준 후 버블정렬을 통해 내림차순으로 재정렬해줬다

코드

#include <stdio.h>
#include <string.h>

//인접한 숫자끼리 크기비교해서 위치교환
void DESC(int arrSorted[], int len) {
    int temp;

    for(int i = 1; i < len; i++) {
        for(int j = i; j > 0; j--) {
            if(arrSorted[j] >= arrSorted[j - 1]) {
                temp = arrSorted[j];
                arrSorted[j] = arrSorted[j - 1];
                arrSorted[j - 1] = temp;
            }
        }
    }
}

int main(void) {
    char n[100] = {};
    int arrSorted[100] = {};

    scanf("%s", n); //전체 숫자를 string 형식으로 받아 char배열에 입력

    int len = strlen(n); //숫자 개수 구하기

    for(int i = 0; i < len; i++) { //전체 숫자를 int형으로 전환
        arrSorted[i] = n[i] - 48;
    }

    DESC(arrSorted, len); //버블정렬로 내림차순 정렬

    for(int i = 0; i < len; i++) { //출력
        printf("%d", arrSorted[i]);
    }

    return 0;
}
반응형