혜랑's STORY

[여름방학 3주차 C과제] 본문

2020 SISS 21기 활동/여름방학 C언어

[여름방학 3주차 C과제]

hyerang0125 2020. 7. 24. 14:37

#SWEA 2005번 : 파스칼의 삼각형

SWEA 2005번 문제

- 실행결과

SWEA 2005번 실행결과

- 풀이

#include <stdio.h>

int f(int x, int y) {
	if (x == 0 || y == 0 || x == y) { //x, y는 위치를 의미
		return 1;
	}
	else {
		return f(x - 1, y - 1) + f(x - 1, y); //각각 상위 왼쪽 좌표와 상위 오른쪽 좌표를 의미
	}
}

int main() {
	int T,num;
	scanf_s("%d", &T);

	for (int i = 1; i <= T; i++) {
		scanf_s("%d", &num);
		printf("#%d\n", i);

		for (int j = 0; j < num; j++) {
			for (int n = 0; n <= j; n++) {
				printf("%d ", f(j, n));
			}
			printf("\n");
		}
		printf("\n");
	}
}

[파스칼의 삼각형] : 수학에서 이항계수를 삼각형 모양의 기하학적 형태로 배열한 것.

파스칼의 삼각형 예시

[규칙]

 처음 두 줄은 가장자리의 수가 '0'이라 생각하여 0과 1을 더한 1이 그대로 내려오게 된다.(가장자리에 수가 없는 다른 경우에도 적용된다.) 파스칼의 삼각형 3열부터는 상위 열의 2개 숫자를 더하여 만든다. 

 이 규칙을 이용하여 3번째 항부터 숫자들을 구할 때 상위 2개의 좌표를 더하여 그 값을 구할 수 있다. f(x-1, y-1) + f(x-1, y)는 각 상위 열의 왼쪽 좌표값과 오른쪽 좌표값인 것을 이용하여 재귀함수를 이용하였다.

#SWEA 1966번 : 숫자를 정렬하자

SWEA 1966번 문제

- 실행결과

SWEA 1966번

- 풀이

#include <stdio.h>

int main() {
	int T, n, temp;
	scanf_s("%d", &T);

	for (int i = 1; i <= T; i++) {
		scanf_s("%d", &n);
        //n만큼의 배열 생성
		int* numList = (int*)malloc(sizeof(int) * n);
		for (int j = 0; j < n; j++) {
			scanf_s("%d", &numList[j]);
		}
		
        //버블 정렬 이용
		for (int j = 0; j < n; j++) {
			for (int k = 0; k < n - 1; k++) {
				if (numList[k] > numList[k + 1]) {
					temp = numList[k];
					numList[k] = numList[k + 1];
					numList[k + 1] = temp;
				}
			}
		}

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

[버블 정렬] : 배열 내의 두개의 인접한 index를 비교하여 더 큰 숫자를 뒤로 보내 차곡차곡 쌓아 정렬하는 방법

 버블 정렬을 구현하기 위하여 안쪽 for문에서 [0]과 [1]의 값을 비교하여 더 큰 값을 뒤로 보내주고, [1]과 [2]의 값을 비교하여 더 큰 값을 보내주는 식으로 계속하여 두 값을 비교하여 1차 정렬을 한다. 바깥쪽 for문이 실행되면 이 과정이 한 번 더 반복하며 정렬을 완료한다. 

'2020 SISS 21기 활동 > 여름방학 C언어' 카테고리의 다른 글

[여름방학 6주차 C과제]  (0) 2020.08.15
[여름방학 5주차 C과제]  (0) 2020.08.07
[여름방학 4주차 C과제]  (0) 2020.08.02
[여름방학 2주차 C과제]  (0) 2020.07.15
[여름방학 1주차 C과제]  (0) 2020.07.09