[백준 BOJ] 2750번 수 정렬하기 (C언어)

2022. 1. 28. 18:43PS (Program Solving)/BOJ (백준)

문제 설명

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

 

2750번: 수 정렬하기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

백준 BOJ 2750번 수 정렬하기 문제 사진

 

접근 방법 - 정렬 알고리즘의 기본 문제

백준의 2750번 문제는 정렬 알고리즘을 이용하여 해결해야 하는 문제이다.

해당 문제에선 주어지는 숫자들을 오름차순으로 정렬하여 출력해야 한다.

필자는 정렬 알고리즘에 대해선 많이 미숙하였기 때문에 선택 정렬 알고리즘을 통해 문제를 해결하였다.

다만 선택 정렬은 정렬 알고리즘 중 실행 속도가 느린 편이기 때문에 추천하지 않는 방법이다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 입력받을 숫자 개수(n)를 입력받은 뒤, 숫자들(arr)을 순차적으로 입력받는다.

 

2) 이중 반복문을 통해 선택 정렬을 실행한다.

- 제어 변수 i는 0에서부터 n-1까지 1씩 증가하는 변수로 설정한다.

- 제어 변수 j는 i+1에서부터 n-1까지 1씩 증가하는 변수로 설정한다.

- arr[i] 값이 arr[j]보다 클 시엔 두 개의 값 위치를 바꾼다. (여기서 i의 위치는 늘 j의 위치보다 왼쪽에 있다.)

 

3) 정렬이 모두 끝나면 최종적으로 저장된 결괏값을 차례로 출력한다.

 

후기

필자는 정렬 알고리즘에 대한 지식이 많이 없는 상태로 이 문제를 접하였다.

그 결과, 해당 문제는 해결하였지만 더 심화된 문제를 접하였을 때엔 매번 시간 초과를 겪곤 했다.

정렬 알고리즘에 대한 공부를 더 다잡고 난 뒤에 해당 문제와 관련된 문제를 풀어보기로 하였다.

특히 해당 개념에 대해 공부를 할 때, 어느 알고리즘의 실행 속도가 더 빠른지에 초점을 맞추어 공부하고자 한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>

//백준 2750번 코드
int arr[1000];
int main() {
	int n;
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
	}

	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			if (arr[i] > arr[j]) {
				int tmp = arr[i];
				arr[i] = arr[j];
				arr[j] = tmp;
			}
		}
	}

	for (int i = 0; i < n; i++) {
		printf("%d\n", arr[i]);
	}
}

 

제출 결과

백준 BOJ 2750번 수 정렬하기 문제 C 제출 결과

(2021.12.24 백준 2750번 문제 제출 결과)

반응형