Tycoon/알고리즘의 이해(2): C언어편 (完)

[알고리즘의 이해(2): C언어편] 연습문제 10장

nyamnmm 2025. 1. 3. 00:20
『 1~100을 이용한 알고리즘의 이해 2: C언어편 』
저자: 김득수
사용 프로그램: Visual Studio 2019
※ 본 게시글에 작성된 문제는 책 본문과 일치하지 않는 부분이 존재하며, 풀이 또한 정확하지 않습니다.

 


 

10-1. 데이터가 6개 (5, 3, 6, 1, 4, 2) 인 경우 오름차순 정렬을 하기 위한 순서도를 완성하시오.
문제풀이
#include <stdio.h>

void main() {
	int a[6] = { 5,3,6,1,4,2 };
	int i, j, t;

	for (i = 0; i < 5; i++) {
		for (j = i + 1; j < 6;) { 		// ※ j++; 부분 누락
			if (a[i] > a[j]) {
				t = a[i];
				a[i] = a[j];
				a[j] = a[i]; 		// ※ a[i]가 아니라 t
			}
		// ※ for 의 } 부분 누락

		printf("%d %d %d %d %d %d \n", a[0], a[1], a[2], a[3], a[4], a[5]);
	}

// ※ main() 의 } 누락

 

오답풀이
#include <stdio.h>

void main() {
	int a[6] = { 5,3,6,1,4,2 };
	int i, j, t;

	for (i = 0; i < 5; i++) {
		for (j = i + 1; j < 6; j++) {
			if (a[i] > a[j]) {
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}

		printf("%d %d %d %d %d %d \n", a[0], a[1], a[2], a[3], a[4], a[5]);
	}
}

 

실행결과
1 5 6 3 4 2
1 2 6 5 4 3
1 2 3 6 5 4
1 2 3 4 6 5
1 2 3 4 5 6

 


 

10-2. 데이터가 7개 (5, 3, 6, 1, 7, 4, 2)인 경우 내림차순 정렬을 하기 위한 순서도를 완성하시오.
문제풀이
#include <stdio.h>

void main() {
	int a[7] = { 5,3,6,1,7,4,2 };
	int i, j, t;

	for (i = 0; i < 6; i++) {
		for (j = i + 1; j < 7; j++) {
			if (a[i] < a[j]) {
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}

		printf("%d %d %d %d %d %d %d \n", a[0], a[1], a[2], a[3], a[4], a[5], a[6]);
	}
}

 

실행결과
7 3 5 1 6 4 2
7 6 3 1 5 4 2
7 6 5 1 3 4 2
7 6 5 4 1 3 2
7 6 5 4 3 1 2
7 6 5 4 3 2 1

 


 

10-3. 데이터가 8개 (5, 3, 6, 1, 7, 4, 8, 2) 인 경우 오름차순 정렬을 하기 위한 순서도를 완성하시오.
문제풀이
#include <stdio.h>

void main() {
	int a[8] = { 5,3,6,1,7,4,8,2 };
	int i, j, t;

	for (i = 0; i < 7; i++) {
		for (j = 0; j < 7 - i; j++) {
			if (a[j] > a[j + 1]) {
				t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}

		for (int n = 0; n < 8; n++) {
			printf("%d ", a[n]);
		}

		printf("\n");
	}

 

실행결과
3 5 1 6 4 7 2 8
3 1 5 4 6 2 7 8
1 3 4 5 2 6 7 8
1 3 4 2 5 6 7 8
1 3 2 4 5 6 7 8
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8

 


 

10-4. 데이터가 9개 (5, 3, 9, 1, 6, 7, 4, 8, 2)인 경우 오름차순 정렬을 하기 위한 순서도를 완성하시오.
문제풀이
#include <stdio.h>

void main() {
	int a[9] = { 5,3,9,1,6,7,4,8,2 };
	int i, j, key;

	for (i = 1; i < 9; i++) {
		key = a[i];

		for (j = i - 1; j >= 0; j--) {
			if (a[j] > key) {
				a[j + 1] = a[j];
			}
			else {
				break;
			}
		}

		a[j + 1] = key;

		for (int n = 0; n < 9; n++) {
			printf("%d ", a[n]);
		}

		printf("\n");
	}
}

 

실행결과
3 5 9 1 6 7 4 8 2
3 5 9 1 6 7 4 8 2
1 3 5 9 6 7 4 8 2
1 3 5 6 9 7 4 8 2
1 3 5 6 7 9 4 8 2
1 3 4 5 6 7 9 8 2
1 3 4 5 6 7 8 9 2
1 2 3 4 5 6 7 8 9