본문 바로가기

Algorithm

(20)
이제와서 수학을 공부 하려는 이유 중학생때 친구들의 기억속에 나는 수학을 꽤 잘하는 아이였다. 단순히 수학점수가 높다는게 아니라, 단순한 연산력보다 논리력을 필요로 하는 수학문제를 잘 풀었다. 내가 특별히 머리가 좋아서가 아니라, 당시 다녔던 수학학원에서 한달에 한번인가 했던 '생각하는 수학'이라는 수업 덕분이었다. 그 수업시간에는 중학생때 배운 공식을 대입해서는 풀수없는 문제들을 내는데, 문제를 풀면서 '왜 그렇게 풀었는지'를 설명해야 되는 시간이었다. 이 수업에서는 배운 공식을 이용해서 연산을 잘 잘하는 능력보다는 가설을 세우고 검증을 해서 답을 도출해내는 능력이 필요했다. 처음 시간에 다 못풀고 답을 알려줬을때 나의 반응은 '이걸 중딩이 어떻게 풀지?' 였는데, 점점 진행해갈수록 어거지라도 다양한 방법으로 푸는 스스로를 보면서 놀랐..
삽입정렬 선택정렬(O(n^2)) 버블정렬과 마찬가지로 기본적인 정렬 1번째 부터 하나씩 숫자를 선택해서 반복하면서 선택한 숫자의 위치를 찾아서 정렬하는 방식 즉 선택한 숫자보다 큰 숫자들은 오른쪽으로 한 칸씩 밀어내고 빈 자리에 선택한 숫자를 넣는 원리 이해하기 좀 복잡한 편인데 효율도 안좋아서 안쓰는게 날듯 선택한 숫자보다 큰 숫자들은 오른쪽으로 한 칸씩 밀어내고 빈 자리에 선택한 숫자를 넣는 겁니다. function insertionSort(arr) { let i=1, j, temp; for (i; i = 0 && temp < arr[j];..
선택 정렬 선택정렬(O(n^2)) 버블정렬과 마찬가지로 기본적인 정렬 0번째에 한바퀴를 돌아서 최소값을 찾아서 최소값을 0번째로 옮기고, 최소값이 있던 자리에 0번째 값을 옮긴다. 1번째에 1번째 최소값을 찾아서 1번째로 옮기고 1번째 최소값이 있던 자리에 1번째 값을 옮긴다. 이런식으로 반복 var selectionSort = function(arr) { let minIndex, temp, i, j; for (i = 0; i < arr.length - 1; i++) { minIndex = i; // 최소값 인덱스는 i로 놓고 반복 for (j = i + 1; j < arr.length; j++) { // i 다음 값부터 해서 반복 if (arr[j] < arr[minIndex]) { // 현재 위치에 담긴 값이 ..
버블 정렬과 버블정렬을 이용한 최대값, 최소값, 평균값 구하기 정렬의 기본 버블정렬(O(n^2)) 정렬 중에 가장 기본 정렬인 버블정렬이다. 앞뒤 숫자를 바꾸는 방식을 계속 반복하는 방식으로 구현된다. var arr = [100,40,30,70,10,90]; for (let i = 0; i arr[j+1]) { // 앞의 수가 더크면 const tmp = arr[j]; // 앞의 수를 임시값에 담음 arr[j] = arr[j+1]; // 앞에 뒤에껄 담음 arr[j+1] = tmp; // 뒤에 임시값을 담음 console...