https://youtu.be/LwZluv5xFZk
https://youtu.be/1IbFjVCYPaI 교회라는 사회에서 하나님의 뜻을 가장한 사람의 폭력으로 인해 상처 받는 이들이 없었으면 좋겠다. 교회는 떠나더라도 하나님은 떠나지 않았으면 좋겠다. 나는 하나님이 우리가 거룩하기 이전에 먼저 자유하길 원하신다고 생각한다. 그런데 많은 교회들이 하나님의 뜻이라는 명목 하에 성도들, 특히 아이들을 옥죈다. 상대방을 당장 내가 옳다고 생각하는 모습으로 바꾸려는 것은 사랑이 아니다. 사랑은 강요하지 않고, 되려 자유롭게 한다. 상대방의 선택이 내가 원하는 모습과 다를지라도 그것을 존중한다. 단, 인내와 오래참음으로 기다릴 뿐이다. 그런 성실한 사랑 안에서 비로소 우리는 거룩해질 수 있다. 자발성만이 진정한 변화(내적 동기와 외적 행위 모두의 변화)를 가져오는 ..
04. 부호화와 발전 p113-114 대부분의 경우 애플리케이션 기능을 변경하려면 저장하는 데이터도 변경해야 한다. 서버 측 애플리케이션에서는 한 번에 몇 개의 노드에 새 버전을 배포하고 새로운 버전이 원활하게 실행되는지 확인한 다음 서서히 모든 노드에서 실행되게 하는 순회식 업그레이드(rolling upgrade) 방식이 있다. 클라이언트 측 애플리케이션은 사용자에 전적으로 좌우된다. 이것은 예전 버전의 코드와 새로운 버전의 코드, 이전의 데이터 타입과 새로운 데이터 타입이 어쩌면 모든 시스템에 동시에 공존할 수 있다는 의미다. 시스템이 계속 원활하게 실행되게 하려면 양방향으로 호환성을 유지해야 한다. 하위 호환성 : 새로운 코드는 예전 코드가 기록한 데이터를 읽을 수 있어야 한다. 상위 호환성 : 예..
각각의 자릿수 별로 정렬하여 완벽히 정렬된 배열을 만들어내는 알고리즘 #define N 10 #define K 40 #define D 2 int data[N] = {40, 6, 1, 9, 3, 5, 5, 3, 6, 6}; int cnt[K + 2]; int ans[N]; int main(void) { radixSort(); } void radixSort(void) { int i, j; for (i = 0; i < D; i++) // 작은 자리수부터 계산하는 이뉴는 stable sort를 위해 { countingSort(i); for (j = 0; j < N; j++) data[j] = ans[j]; } } void countingSort(int digit) { int i; int t1 = (int)pow..
각각의 원소가 몇 개 존재하는지 counting 한 후 개수를 센 배열을 통해서 정렬된 배열을 뽑아내는 방법 제한사항 데이터는 양의 정수여야 함 데이터 범위(0 ~ K)의 제한이 있음 #define N 10 #define K 40 int data[N] = {40, 6, 1, 9, 3, 5, 5, 3, 6, 6}; int cnt[K + 2]; int ans[N]; int main(void) { int i; for (i = 0; i < N; i++) { cnt[data[i]]++; } for (i = 1; i = 0; i--) { ans[--cnt[data[i]]] = data[i]; // 뒤에서부터 계산하는 이유는 stable sort를 위해 } for (i = 0; i < N; i++) { printf(..
자료구조인 힙(heap)을 이용한 정렬 알고리즘 Heap을 구성한 후 원소들을 다 삽입하고 하나씩 빼면서 배열의 앞에서부터 채워넣는다. #define N 6 int data[N] = {40, 6, 1, 9, 3, 5}; int h[N + 5]; int cnt; heapSort(0, N - 1); void swap(int i, int j) { int t = h[i]; h[i] = h[j]; h[j] = t; } void upHeapify(int index) { if (index == 1) return; if (h[index] < h[index / 2]) { swap(index, index / 2); upHeapify(index / 2); } } void insert(int data) { h[++cnt] =..
합병 정렬과 비슷하게 분할 정복을 이용한 방법 (단, 합병 정렬과 달리 공간복잡도를 N만 사용) Pivot을 설정한다. 0 ~ N-1까지 원소들을 pivot을 기준으로 좌, 우로 나뉘게 한다. (partition) Pivot을 기준으로 나뉜 왼쪽, 오른쪽 부분배열을 각각 정렬한다. (재귀) #define N 6 quickSort(0, N - 1); void quickSort(int left, int right) { if (left
- Total
- Today
- Yesterday