자료구조&알고리즘/백준

[백준 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