'어떤 배열 2개를 던져주고 두 배열을 비교해서 어떠한 답을 도출해라' 라는 문제가 나오면 어떻게 해야할까? 일단 naive한 답으로써는... for문을 이중으로 사용하여 for 배열1 { for 배열2 { 배열1의 각 요소와 배열2 모두 비교 } } 위와 같은 방식으로 구현하는 것이다. 배열 2개를 모두 순회하여 답을 구할 수 있다. 즉, O(N^2)의 복잡도를 가지게 된다. O(N^2)로 아래의 문제를 한번 풀어보도록 하자. 문제 원문) /* Write a function called same, which accepts two arrays. The function should return true if every value in the array has it's correponding value sq..
문제 출처 https://www.c0d3.com/curriculum/js2 C0D3 — Learn Javascript the old school way Learn the foundations to be a full stack software engineer. 100% free. www.c0d3.com Write a function called solution that replicates Array.prototype.reduce and call it cReduce. Callback takes 4 input parameters, accumulator, element, index and original array. documentation result = [5,8,7].cReduce( (acc, e, i, a..
내가 어떠한 문제를 해결해야 할 상황을 맞닥드렸을 때 아무 가이드라인도 없이 문제를 풀려고 하면 심히 당황할 것이다. 이럴 경우를 대비한 문제 해결의 가이드라인이다. 문제 해결 접근법 문제를 이해하라 몇가지 간단한 예제를 만들어라. 문제를 분할하고 어떻게 풀 지 고민해라. 문제를 풀어라. 풀리지 않는다면 간단하게 만들어라. 복습하고 리팩토링해라 문제를 이해하라 - 문제를 내 방식대로 다시 생각할 수 있는가? - 실제 문제가 어떤 것인지 내 스스로 질문을 던지고 이해해라. - 문제의 인풋은 무엇이고 아웃풋은 무엇인지? 간단한 예제를 만들어라 - 문제를 이해했다면 인풋과 아웃풋을 예상할 수 있을 것이다. - 간단한 예제를 만들어본 뒤, 복잡한 예제를 만들어보아라. - 유효한 인풋부터 아무것도 입력하지 않은 ..
배열은 정렬된 자료구조로써 인덱스를 통해 자료들을 배열한다. 이 인덱스라는 존재가 배열의 연산성능을 다소 희생시킬 수 있다. 객체는 그냥 종이봉다리에 키값쌍을 잔뜩넣은 한 뭉치라 굳이 인덱스에 신경 쓸 필요가 없지만 배열은 중간에 자료를 하나 넣으면 그 뒤의 모든 인덱스를 일일히 수정해주어야 한다. 따라서 삽입과 삭제의 경우, 그 연산 위치에 따라 빅오 성능이 달라진다. 삽입 - 배열끝이냐 처음, 중간이냐에 따라 달라짐 삭제 - 배열끝이냐 처음, 중간이냐에 따라 달라짐 검색 - O(N) 접근 - O(1) 만약 배열 끝에 push만 할 경우, 인덱스만 하나 추가하고 자료를 하나 더 붙여주면 되기 때문에 push의 시간은 O(1)이다. 배열의 끝 자료를 삭제하는 pop도 마찬가지이다. 배열의 앞에서 자료를 ..
객체란 무엇인가? 객체는 정렬되지 않은 키 값 쌍이다. 여기서 키포인트는 정렬되지 않았다는 것이다. 객체는 정렬되지 않은 키값쌍을 나타내는 자료구조며, 따라서 정렬할 필요가 없는 데이터를 활용할 때 사용하면 가장 괜찮은 자료구조가 객체이다. 이 정렬되지 않는다는 장점은 객체의 삽입, 삭제, 검색, 접근에 따른 빅오 시간에 있다. 삽입 : O(1) 삭제 : O(1) 검색 : O(N) 접근 : O(1) 객체는 정렬이 되어있지 않으므로 삽입했을 때 다시 인덱스를 수정하는 등의 작업을 하지 않아도 된다. 그냥 해당 객체를 삽입하거나, 삭제하거나, 접근(Access)하면 된다. 따라서 삽입, 삭제, 접근의 빅오 노테이션은 O(1)이라고 할 수 있다. 다만 검색(Search)의 경우 해당 키(key)에 따른 (va..
빅오 표기법이란? 알고리즘의 효율성을 파악하기 위한 표기법으로써 알고리즘의 가장 최악의 경우를 고려하여 표기한다. 이 때 중요하게 보아야 하는 것은 지수이며, 계수는 무시한다. 상수의 경우 1로 표기한다. ex) f(5955) -> O(1) ex) f(2n) -> O(n) ex) f(3n²) -> O(n²) 시간 복잡도 (Time Complexity) 시간복잡도는 알고리즘이 실행되는 동안 소요되는 시간을 측정하는 방법이다. 하지만 절대적인 시간을 측정하게 된다면 알고리즘을 실행하는 컴퓨터 하드웨어의 성능에 따라 차이가 생기므로 연산량으로 시간복잡도를 측정한다. 시간복잡도는 보통 BigO 표기법으로 표기하며, 알고리즘의 최악의 경우를 상정하여 시간복잡도를 측정한다. function addUpTo(n) { ..