Javascript(68)
-
[JS 33가지] 5. typeof vs instanceof
1. typeof typeof 연산자는 피 연산자의 자료형을 나타내는 문자열을 반환하는 함수다. console.log(typeof 42); // number console.log(typeof "str"); // string console.log(typeof true); // boolean console.log(typeof false); // boolean console.log(typeof function(){}) // function console.log(typeof {}); // object console.log(typeof []); // object 참조 타입이든 원시 타입이든 자료형을 나타내는데 크게 문제가 없는 것 같다. 하지만 typeof의 문제점은 null의 자료형을 나타내는 문자열을 반환하는..
2020.06.30 -
[JS] 프로그래머스 - 큰 수 만들기
1. 문제 설명 2. 제한 조건 3. 입출력 예 4. 나의 풀이 쉽게 생각했다가 큰 코 다친 문제다. 예상치 못했던 테스트 케이스 10에서의 시간 초과는 멘붕 그 자체였다. 그런데 이 문제가 탐욕법이라는 범주안에 있는 것을 생각해보면, 이 문제는 정말 탐욕법스러운 문제라 할 수 있을 것 같다. 이제 풀이를 시작하도록 하겠다. 이 문제가 물어보는 메세지를 파악하는 것이 중요하다. 이 문제의 메세지는 어떤 숫자에서 k개의 숫자를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하라 이다. 테스트 케이스 10(시간 초과)을 해결할 수 있었던 것은 내가 짰던 코드의 방향을 아예 바꾸는 것이었다(다른 블로그(참고 자료 출처)를 참고했다). 기존에 풀던 방식은 투 포인터를 이용하는 것이었다. 방법은 다음과 같다. 입력..
2020.06.29 -
[JS] 다이나믹 프로그래밍
1. 다이나믹 프로그래밍 다이나믹 프로그래밍이란, 하나의 문제를 단 한번만 풀도록 하는 알고리즘이다. 이전에 나는 퀵 정렬, 병합 정렬, 이진검색과 같은 자료구조를 포스팅한 적이 있다. 이 셋을 언급한 이유는 분할 기법을 이용하기 때문이다. 퀵 정렬, 병합 정렬, 이진검색은 분할 기법을 이용해서 평균 시간복잡도 O(Nlog₂N)이라는 굉장히 빠른 속도를 장점으로 가질 수 있었다. 하지만 되게 빨라보이는 분할기법도 어떤 상황에서는 단점이 존재하는데, 그것은 바로 동일한 문제를 반복해서 푼다는 것이다. 그 대표적인 예시가 피보나치 수열이다. 피보나치 수열은 제 0항, 제 1항을 1로 제쳐두고 두 번째 항부터는 앞에 두 수를 더한 값을 결과로 두는 수열을 말한다. 피보나치 수열은 보통 프로그래밍 언어에서 재귀..
2020.06.29 -
[JS 33가지] 4. 형 변환
1. 명시적 변환 vs 암시적 변환 형 변환은 어떤 타입을 다른 타입으로 변환하는 과정을 말한다. 자바스크립트에서 형 변환은 명시적, 암시적 두 형태로 나뉘어진다. 명시적 형 변환은 프로그래머가 형 변환을 직접적으로 한 것을 말한다. 하지만 암시적 형 변환은 자바스크립트의 판단 하에 형 변환을 한 것을 말한다. // 명시적 형 변환 console.log(Number("1")); console.log(String(1234)); // 암시적 형 변환 console.log(1 + "23"); // "123" console.log(true + 55); // 56 console.log(false + 0); // 0 암시적 형 변환은 보통 원시적 타입이든 참조적 타입이든 타입 간에 연산자를 적용하는 경우와 if같은..
2020.06.26 -
[JS] 이진 검색
1. 이진 검색 이진 검색(Binary Search)은 자료 가운데 있는 항목을 키 값과 비교하여 더 크면 오른쪽 부분을 검색하고, 키 값이 더 작으면 왼쪽 부분을 검색하는 방법이다. 이진 검색(Binary Search)은 퀵 정렬과 마찬가지로 분할과 정복 기법을 사용하기 때문에 시간 복잡도가 O(log₂N)으로 엄청나게 빠른 속도를 자랑한다. 하지만 이진 검색은 삽입, 삭제를 수행한 후에 항상 배열의 상태를 정렬된 상태로 유지해야 하는 작업이 따로 필요하다. 그 이유는 이진 검색(Binary Search)이 정렬된 순차 자료구조에서만 사용할 수 있기 때문이다. 2. 동작 순서 퀵 정렬의 동작을 제대로 알고 있다면, 이진 검색(Binary Search)의 동작도 쉽게 이해할 수 있을 것이다. 이진 검색의..
2020.06.26 -
[JS] 순차검색
1. 순차 검색 순차 검색은 가장 쉽고 단순한 검색 방법으로써, 순서대로 항목을 비교하면서 검색하는 순차 검색과 인덱스 테이블을 사용하여 검색의 효율성을 높인 색인 순차검색이 있다. 정렬되지 않은 순차 자료구조에서의 순차검색 첫 번째 원소부터 시작해서 마지막 원소까지 순서대로 키 값이 일치하는 원소가 있는지를 비교하여 찾는다. 키 값이 일치하는 원소를 찾 으면 그 원소가 몇 번째 원소인지를 반화한다. 마지막 원소까지 비교하여 키 값이 일치하는 원소가 없으면 검색이 실패된다. 순차 검색에서 비교횟수는 원소의 위치에 따라 다르다. 찾고자 하는 원소가 첫 번째 원소면 비교횟수는 1이고, 마지막 원소라면 비교횟 수가 n이다. 따라서 순차 검색의 평균 시간 복잡도는 O(n)이다. 정렬되어 있는 순차 자료구조에서의..
2020.06.26