자료구조&알고리즘/백준
[백준 c 1427] 소트인사이드 (실버 5) / 문자열 / 버블정렬
celinayk
2022. 10. 27. 18:57
반응형
문제

접근
언듯 보면 그냥 숫자 정렬하면 되는문제 아닌가? 싶지만 수를 입력받으면 각각의 자리수를 정렬해야 한다. 평소에 정렬을 하는 것처럼 할 수없다. 2143을 입력하면 2, 1, 4, 3 이렇게 숫자가 입력되는게 아니라 2143이라는 하나의 숫자가 입력되는 것이기 때문이다. 솔직히 처음에 고민을 했는데 문자열을 이용할 수 있다.
2143을 하나의 문자열로 봐서 2라는 문자 1이라는 문자 4라는 문자 3이라는 문자로 접근하면 된다
코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main() {
char num[11] = { 0, };
char temp;
scanf("%s", num);
for (int i = 0; i < strlen(num)-1; i++) {
for (int j = 0; j < strlen(num) - 1 - i; j++) {
if (num[j] < num[j + 1]) {
temp = num[j + 1];
num[j + 1] = num[j];
num[j] = temp;
}
}
}
printf("%s", num);
return 0;
}
리뷰
int 대신 char자료형을 사용한다.
scanf로 입력을 받을때 %s를 사용해서 문자열로 입력을 받는다. %c는 문자를 입력받는 것이고 %s는 문자열로 입력받는 것이다
버블정렬을 통해 정렬을 해준다.
strlen함수를 이용해서 입력받은 num배열의 문자열의 길이를 구해준다.
그 문자열의 길이만큼 반복문을 돌려서 정렬해준다.
학습
아직까지 문자열에 대한 개념이 부족한 것같다. 문자열에 대해 공부를 더 해야겠다. 그리고 버블정렬말고 다른 정렬도 배워서 적용시켜봐야겠다
출처
https://www.acmicpc.net/problem/1427
1427번: 소트인사이드
첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net