본문 바로가기

전체 글61

[ES6] var와 let & const 다음과 같은 코드가 있다. function getClothing(isCold) { if (isCold) { var freezing = "Grab a jacket!"; } else { var hot = "It's a shorts kind of day"; console.log(freezing); }} 이 함수를 호출하면 어떻게 될까?else 블록 안에 freezing이 없기 때문에 Referrence error가 날 것 같지만, Hoisting으로 인해 예상 밖의 결과가 발생하는데, undefined가 출력된다.run-time에서, hoisting이 일어난 코드는 다음과 같이 생겼을 것이다. function getClothing(isCold) { var freezing, hot; if (isCold) { f.. 2018. 3. 14.
Insertion Sort (삽입 정렬) / Shell Sort (셸 정렬) Insertion Sort (삽입 정렬) 앞서 본 다른 정렬 알고리즘과 마찬가지로, 삽입 정렬도 '정렬된 부분'과 '정렬되지 않은 부분'으로 나뉘는데, 진행 방향은 왼쪽에서 오른쪽으로 가는 것으로 하자. 다음과 같은 배열이 있다. 인덱스는 0부터 시작한다. 20 35 -15 7 55 1 -22 먼저 0번째 요소는 정렬된 부분으로 가정한다. 하나 밖에 없으니까.주황색은 정렬된 부분, 초록색은 정렬되지 않은 부분이다. 2035 -15 7 55 1 -22 정렬되지 않은 부분의 맨 왼쪽 인덱스(firstUnsortedIndex; 위의 경우 1)에 위치한 요소(newElement; 위의 경우 35)를, 정렬된 부분의 맨 오른쪽 요소(i)부터 왼쪽으로 하나씩 비교한다. 비교하면서 newElement보다 큰 요소가 .. 2018. 3. 6.
Bubble Sort (버블 정렬) / Selection Sort (선택 정렬) Bubble Sort (버블 정렬) visualization의 차이: (오름차순으로 정렬)배열의 요소들을 가로로 놓은 뒤 가장 큰 값부터 오른쪽으로 몰아가는 방식혹은 가장 작은 값을 찾아 왼쪽으로 몰아가는 방식세로로 놓고 가장 작은 값을 밑으로, 큰 값을 위쪽으로 놓는 방식 등 결과는 똑같다. public class Main { public static void main(String[] args) { int[] intArray = { 20, 35, -15, 7, 55, 1, -22 }; // 버블 정렬 for (int lastUnsortedIndex = intArray.length - 1; lastUnsortedIndex > 0; lastUnsortedIndex--) { for (int i = 0; i .. 2018. 3. 5.
메모리에 위치한 배열과 연산에 대한 Big-O value 배열에 대해 알아야 할 점을 간단히 정리해보자. 메모리에서 연속적으로 위치한다. 여기 저기 흩어져 있는 게 아니라, 한 배열의 요소들은 메모리 안에서 서로 인접해 있다. 메모리 안에 큰 블록이 생긴다고 생각할 수 있다. 배열의 길이가 한 번 정해지면 다시 수정할 수 없는 이유가 이 때문이다.한 배열 안의 모든 요소들은 같은 크기를 갖고 있다. 이를테면 int 배열이면 4바이트씩 할당된다. 만약 primitive type이 아니라 object 배열이라면 어떨까? 배열의 원소가 object라면, 사실 그건 object 자체가 아니라 object reference다. 해당 object를 참조하고 있을 뿐이다. 그러니 어떤 object를 참조하든 상관없이 배열 안에서 항상 같은 크기를 갖고 있다. 바로 이러한 .. 2018. 3. 4.
Big-O Notation (빅오 표기법) 복잡도(Complexity)는 크게, 시간 복잡도 (Time Complexity) 공간 복잡도 (Memory Complexity) 의 2가지로 나눌 수 있는데, 요즘은 메모리 가격이 많이 낮아져서 공간 복잡도보다는 주로 시간 복잡도에 더 관심을 기울이는 편이다. 시간 복잡도란 즉, 어떤 알고리즘을 수행하는 데 얼마나 많은 절차(step)를 거쳐야하는지를 나타낸다. 시간 복잡도의 최선의 경우(best case)와 최악의 경우(worst case)를 생각했을 때, 최선의 경우는 별로 의미가 없다. 알고리즘을 수행할 때 최선의 경우가 발생하는 상황은 실질적으로는 드물기 때문이다. 평균(average case)도 생각해볼 수는 있겠지만 최악의 경우에 대한 유의미한 정보를 제공해주지는 않는다. 따라서 알고리즘 간.. 2018. 3. 4.