woonadz :)

[백준/C언어] 정렬_2750번_nabi 본문

IT/백준

[백준/C언어] 정렬_2750번_nabi

C_scorch 2021. 10. 28. 01:18
반응형

 


 

이 정렬 문제에 데이터는 최대 1000개로 작으니 단순 정렬과 버블 정렬을 사용하겠다. 버블 정렬은 시간이 오래 걸리는 편이지만 코드 구현이 쉬워서 많이 쓰인다고 한다.

관련 개념들은 아래 포스팅을 참고해주셨으면 한다.

https://scorchingnraining.tistory.com/entry/%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC%EC%A0%95%EB%A0%ACnabi

 

[개념정리]정렬_nabi

기록용 3줄 TMI 시험 공부를 하면 할수록 빨리 스터디를 다시 시작하고 싶은 마음이 커진다. 요새 갑자기 든 생각인데 공부를 하려면 항상 겸손해야하는 것 같다. 좀 감성적인 생각인 것 같지만

scorchingnraining.tistory.com

 

먼저 선택 정렬 코드이다.

#include <stdio.h>

int main() {
	int N,cha,min,i,j,k;
	scanf_s("%d", &N); //정렬해줄 N개 입력받기
	int numArr[1000]; //N을 최대 1000까지 입력 가능하므로 배열 크기도 1000으로 지정

	for (i = 0; i < N; i++) 
		scanf_s("%d", &numArr[i]); //N개 만큼의 숫자 입력받기

	for (j = 0; j < N - 1; j++) { //선택 정렬 코드 구현
		min = j;
		for (k = j + 1; k < N; k++) {
			if (numArr[min] > numArr[k])
				min = k;
		}
		cha = numArr[j];  //위치 바꾸기
		numArr[j] = numArr[min];
		numArr[min] = cha;
	}
	
	for (i = 0; i < N; i++)
		printf("%d\n", numArr[i]); //오름차순으로 정렬한 결과 출력

	return 0;
}

코드 설명은 주석에서 했으니 생략하도록 하겠다. 

 

다음은 삽입 정렬 코드이다.

#include <stdio.h>

int main() {
	int N,cha,min,i,j,k;
	scanf_s("%d", &N); //정렬해줄 N개 입력받기
	int numArr[1000]; //N을 최대 1000까지 입력 가능하므로 배열 크기도 1000으로 지정

	for (i = 0; i < N; i++) 
		scanf_s("%d", &numArr[i]); //N개 만큼의 숫자 입력받기

	for (j = 1; j < N; j++) { //삽입 정렬 코드 구현
		min = numArr[j];
		k = j - 1;
		while (k >= 0 && numArr[k]>min) {
			numArr[k+1] = numArr[k]; //앞순서와 위치바꾸기
			k--;
		}
		numArr[k + 1] = min;
	}
	
	for (i = 0; i < N; i++)
		printf("%d\n", numArr[i]); //오름차순으로 정렬한 결과 출력

	return 0;
}

사실 삽입 정렬 코드 구현이 좀 힘들어 개념 정리를 참고해 풀었다. 

 

버블 정렬 코드이다.

#include <stdio.h>

int main() {
	int N,cha;
	scanf_s("%d", &N); //정렬해줄 N개 입력받기
	int numArr[1000]; //N을 최대 1000까지 입력 가능하므로 배열 크기도 1000으로 지정

	for (int i = 0; i < N; i++) 
		scanf_s("%d", &numArr[i]); //N개 만큼의 숫자 입력받기

	for (int j=0; j<N-1; j++) //버블 정렬 코드 구현
		for (int k = 0; k < N-j-1; k++) {
			if (numArr[k+1] < numArr[k]) {
				cha = numArr[k+1];  //위치 바꾸기
				numArr[k+1] = numArr[k];
				numArr[k] = cha;
			}
		}
	
	for (int i = 0; i < N; i++)
		printf("%d\n", numArr[i]); //오름차순으로 정렬한 결과 출력

	return 0;
}

버블 정렬 코드 구현이 가장 빠르고 쉬웠다. 이래서 많이들 쓰는 알고리즘인가보다 싶었다ㅎㅎ

 

 

 

아래 코드는 뭔지 모르겠지만.. 아무 생각 없이 그냥 풀었을 때의 코드인데 백준에 답으로 제출되길래 함께 업로드한다. 그냥 잡종...? 알고리즘을 구현한게 아닐까 싶다. 혹시 이러한 정렬 종류가 있다면 댓글로 알려주시면 감사하겠습니다.

#include <stdio.h>

int main() {
	int N,cha;
	scanf_s("%d", &N); //정렬해줄 N개 입력받기
	int numArr[1000]; //N을 최대 1000까지 입력 가능하므로 배열 크기도 1000으로 지정

	for (int i = 0; i < N; i++) 
		scanf_s("%d", &numArr[i]); //N개 만큼의 숫자 입력받기

	for (int j=0; j<N-1; j++) //정렬 코드 구현
		for (int k = j + 1; k < N; k++) {
			if (numArr[j] > numArr[k]) {
				cha = numArr[j];  //위치 바꾸기
				numArr[j] = numArr[k];
				numArr[k] = cha;
			}
		}
	
	for (int i = 0; i < N; i++)
		printf("%d\n", numArr[i]); //오름차순으로 정렬한 결과 출력

	return 0;
}

 

 

 

(하루에도 몇 번씩 들어오는 블로그이므로 코드에 대한 질문은 댓글로 남겨주시면 빠른 시간 내에 답변하겠습니다.)

 


끝인사 및 느낀점

사실 과제를 하다가 너무 힘들어서 백준 문제를 풀었는데 시간 가는 줄도 모르고 풀었던 것 같다. 중간대체과제가 2개나 남았기에 오늘 끝인사는 여기서 마치겠다.

반응형