[C언어] 백준 1427 : 소트인사이드
생각의 흐름
- 음.. scanf를 하나만 써야되나? 여러개를 쓸 경우 구분할 수 없을까? 힘들겠다 scanf는 하나만 써도 될 것 같다.
- 2143을 각각 arr[i]에 하나씩 넣어야 되는데, 음.. 각 자리수를 쪼개서 넣자. while(n > 0)반복문으로 %10, /10을 사용하자.
- 그러면 arr[i]에 다 들어갔을테니, 정렬을 해주자. 원래라면 선택정렬이나 버블정렬을 했을텐데, 우리는 이전에 퀵정렬을 배웠으니 내장된 퀵정렬을 사용해보자.
- 출력!
내가 푼 풀이
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) //
{
int num1 = *(int *)a;
int num2 = *(int *)b;
if (num1 < num2) // 내림차순이라 부등호 바꿈
return 1;
if (num1 > num2)
return -1;
return 0;
}
int main()
{
int i;
int n;
int len;
scanf("%d", &n);
int t = n;
int s = n;
len = 0;
while (s > 0)
{
t = s % 10;
s = s / 10;
len++;
}
int arr[len]; // 처음에 int arr[n]으로 걍 때려박았는데
// 손해가 너무 심해서 len수를 구한다음에 딱 저장할 공간만 만들어주었다.
i = 0;
while (n > 0)
{
t = n % 10;
n = n / 10;
arr[i] = t;
i++;
} // arr[i]에 각 자리수 넣어주기
qsort(arr, len, sizeof(int), compare); // 퀵 정렬
i = 0;
while (i < len)
{
printf("%d", arr[i]);
i++;
}
}
다른 사람 풀이
https://miingjeong.tistory.com/47
이 사람은 char형으로 입력받았다. 따라서 %10 /10을 할 필요가 없다.
또한 문자형이기에 바로 strlen을 사용해서 길이를 구할 수 있었다.
char형 배열을 int형으로 다시 넣어주기 위해 arr배열을 만들었고, -'0'을 통해 int형으로 바꾸어주며 넣었다.
#include <stdio.h>
#include <string.h>
int main()
{
int arr[10000] = {0, };
char s[10000];
int tmp = 0;
int i, j;
scanf("%s", &s);
for (i = 0; i < strlen(s); i++)
arr[i] = s[i] - '0';
for (i = 0; i < strlen(s) - 1; i++)
{
for (j = 0; j < strlen(s) - 1; j++)
{
if (arr[j] < arr[j + 1])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
for (i = 0; i < strlen(s); i++)
printf("%d", arr[i]);
return 0;
}
Author And Source
이 문제에 관하여([C언어] 백준 1427 : 소트인사이드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimmainsain/C언어-백준-1427-소트인사이드저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)