분류 전체보기

    [BlockChain] TypeScript로 블록 만들기

    1. TypeScript로 블록만들기 (1) OOP(Object Oriented Programming) OOP는 객체지향적인 방법으로 코드를 작성하는 프로그램의 설계 방법론중 하나다. 수많은 객체 단위를 만들어 서로 상호작용하며 동작하는 방식이다. OOP에서 객체는 하나의 역할을 수행하는 함수와 변수들의 묶음 데이터로 보면 된다. 이러한 객체지향 프로그래밍은 프로그램을 만들때 제일 작은 단위부터 만들어가는 방식을 선호한다. 하지만 작은 단위부터 작성하면 테스트가 어렵다는 단점이 있고 이를 극복하기 위해 TDD를 사용한다. (2) TDD(Test Driven Development) 작은 단위들을 테스트 해보며 개발하기 위해 사용하는 기법이다. TDD기법으로 하기 위해 Jest,babel 라이브러리를 사용한..

    [알고리즘] 배열에 중복되지 않는 요소 개수 찾기

    문제 배열에 중복되지 않는 요소들의 개수를 찾는다. 조건 : 시간복잡도 O(n), 공간복잡도 O(n) 예시 countUniqueValues([1, 1, 1, 1, 1, 2]); // 2 countUniqueValues([1, 2, 3, 4, 4, 4, 7, 7, 12, 12, 13]); // 7 countUniqueValues([]); // 0 countUniqueValues([-2, -1, -1, 0, 1]); // 4 풀이 function countUniqueValues(arr) { let i = 0; for (let j = 1; j < arr.length; j++) { if (arr[i] !== arr[j]) { i++; arr[i] = arr[j]; } } return i + 1; }

    [알고리즘] 다중 포인터

    문제 배열에 연속한 둘을 더해 0이 되는값이 있다면 그 두값을 return하는 함수를 만든다. 배열의 요소들은 오름차순으로 정렬되어있다. 예시 sumZero([-4, -3, -2, -1, 0, 1, 2, 5]); 풀이 (1) 1번풀이 function sumZero(arr) { for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { if (arr[i] + arr[j] === 0) { return [arr[i], arr[j]]; } } } } 2중 for문을 돌려 시간복잡도가 O(n^2)이다. (2) 2번풀이 function sumZero(arr) { let left = 0; let right = arr.length ..

    [알고리즘] anagram

    애너그램은 단어나 문장을 구성하고 있는 문자의 순서를 바꾸어 다른 단어나 문장을 만드는 것이다. 문제 두개의 문자열이 주어진다. 두 문자열의 요소는 같지만 순서만 뒤바껴있는지 확인하는 함수를 만든다.조건 : 시간복잡도 O(n) 예시 : validAnagram("", ""); // true validAnagram("aaz", "zza"); // false validAnagram("anagram", "nagaram"); // true validAnagram("rat", "car"); // false) // false validAnagram("awesome", "awesom"); // false validAnagram("amanaplanacanalpanama", "acanalmanplanpamana"); //..

    [알고리즘] 배열 안의 요소 비교

    문제 A와 B 배열이 있는데 B배열안의 요소들이 A배열 요소들의 제곱값인지 판별하는 함수를 만들어야한다. 예를 들면 same([1,2,3,2,5], [9,1,4,4,11]) // false same([1, 2, 3, 2], [9, 1, 4, 4]) // true (1) 1번 풀이 function same(arr1, arr2) { if (arr1.length !== arr2.length) { return false; } for (let i = 0; i < arr1.length; i++) { let correctIndex = arr2.indexOf(arr1[i] ** 2); if (correctIndex === -1) { return false; } arr2.splice(correctIndex, 1); } ..

    [알고리즘] 알고리즘 문제 풀이 순서

    1. 문제 이해하기 문제를 보고 어떠한 문제인지 이해하는게 가장 중요하다고 생각하다. 2. 구체적 예시 알아보기 (1) 간단한 예 생각하기 (2) 복잡한 예 생각하기 (3) 빈 입력값 입력하면 어떻게 되는지 (4) 유효하지 않은 값을 입력하면 어떻게 되는지 3. 코드작성전 문제를 세분화 하기 코드를 작성하기전 문제를 세분화해서 단계를 나누는것이다. 나는 각종 조건들을 나눈다고 생각한다. 예를 들어 객체에 숫자,문자이면서 키값이 존재하는지 -> count +1 객체에 숫자,문자이면서 키값이 없으면 -> 객체에 키 추가, count = 1 이런식으로 투박하게 조건들을 주석으로 달아놓음 4. 해결방법 단순화, 코딩 주석으로 달아놓은 방법들을 코딩 5. 리팩터링 시간복잡도를 따져보며 최적화