개발자/문제풀이 (C언어)

[백준/BOJ] 1427번 소트인사이드 (C/C++)

devBB 2023. 7. 14. 21:12
728x90
반응형

백준 온라인 저지(BOJ) 1427번 소트인사이드

https://www.acmicpc.net/problem/1427

 

1427번: 소트인사이드

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

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

배열이 아닌 숫자를 입력받고 각 자리수를 내림차순으로 정렬하여 출력

입력 N 은 1,000,000,000보다 작거나 같은 자연수

 

2. 풀이

n % 10 연산자를 활용하여 입력받은 숫자를 한 자리 씩 배열에 저장합니다.

이후 배열을 정렬한 뒤 출력하면 됩니다.

 

입력 N 은 최대 10억이므로 int 형 변수로 충분히 처리가 되고

자리수의 개수도 최대 10이므로 배열의 사이즈도 10이면 됩니다.

 

배열의 크기가 최대 10 인 작은 사이즈의 정렬 문제이므로

단순하게 구현이 가능한 선택 정렬을 사용해보았습니다.

 

3. 코드

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
/*
1427_소트인사이드
1112KB	0ms
*/
#include <cstdio>
#define swap(a, b) {int t = a; a = b; b = t;}

int a[10], n, size;

void sSort() {
	int max, pos;
	for (int i = 0; i < size - 1; ++i) {
		max = a[i], pos = i;
		for (int j = i + 1; j < size; ++j) {
			if (a[j] > max) {
				max = a[j];
				pos = j;
			}
		}
		if (pos != i) swap(a[i], a[pos]);
	}
}

int main() {
#ifdef _WIN32
	freopen("input.txt", "r", stdin);
#endif // _WIN32
	scanf("%d", &n);
	while (n) {
		a[size++] = n % 10;
		n /= 10;
	}

	sSort();

	for (int i = 0; i < size; ++i) printf("%d", a[i]);
	return 0;
}

 

728x90
반응형