2020 SISS 21기 활동/여름방학 C언어
[여름방학 3주차 C과제]
hyerang0125
2020. 7. 24. 14:37
#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번 : 숫자를 정렬하자
- 실행결과
- 풀이
#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문이 실행되면 이 과정이 한 번 더 반복하며 정렬을 완료한다.