본문 바로가기

Web development131

[Typscript] 유틸리티 타입 - Pick, Omit Pick 일부의 속성만 가질 수 있을 때 사용한다는 점에서 Partial과 비슷하지만, 속성을 직접 선택한다는 점이 다르다. interface Post { title: string; author: string; content: string; isHidden: boolean; } // 게시글을 작성한다. const newPost = { title: 'hello world', author: 'effy', content: 'hello', isHidden: false, } // 제목과 내용만 바꿀 수 있도록 하고 싶다. function updateOnlyTitleAndContent(post: Post, payload: Pick) { return {...post, ...payload} } updateOnlyTit.. 2020. 7. 22.
[LeetCode] 46. Permutations 순열 (Javascript) https://leetcode.com/problems/permutations/ var permute = function(nums) { return nums.reduce( function(list, element) { var newlist = []; list.forEach(function(seq) { for (var i = seq.length; i >= 0; i--) { var newseq = [].concat(seq); newseq.splice(i, 0, element); newlist.push(newseq); } }); return newlist; }, [[]] ); }; 순열 이해하기가 왜이렇게 어려운지.. 요약하면, 반복을 돌며 값을 고정해나가는 방식이다. [1, 2]이 있다고 하면, 배열 길이만큼.. 2020. 7. 22.
[Typscript] 유틸리티 타입 - Partial, Readonly, Record Partial 일부의 속성만 가질 수 있을 때 사용한다. 예를 들어 게시글 인터페이스엔 제목, 글쓴이, 내용 등등이 있을 것이다. 게시글 수정시 항상 모든 필드를 수정하지는 않는다. 게시글에 포함된 프로퍼티 중 일부의 프로퍼티(하위 타입 집합)만 사용하고 싶을 때 사용할 수 있다. interface Post { title: string; author: string; content: string; isHidden: boolean; } // 게시글을 작성한다. const newPost = { title: 'hello world', author: 'effy', content: 'hello', isHidden: false, } // 수정하고 싶어졌다. 제목만 바꿀수도 있고, 내용만 바꿀수도 있고, 다 바꿀수도 .. 2020. 7. 21.
[LeetCode] 11. Container With Most Water (Javascript) https://leetcode.com/problems/container-with-most-water/submissions/ 막대들이 주어지고, 가장 넓은 면적을 찾는 문제다. 이중포문과 완전탐색으로 풀었는데, 문제를 딱 봤을때 직관적으로 떠오르는 풀이방법이긴 하지만... 더 좋은 방법이 있지 않을까? var maxArea = function(height) { // 위치 index, 높이 h인 object 배열을 만든다. const map = height.map((h, index)=> ({index, h})); let answer = 0; // 이중 포문...으로 모든 조합을 찾는다. for (let i = 0 ; i < map.length; i++) { for (let j = i + 1; j < map... 2020. 7. 21.
[LeetCode] 349, 350. Intersection of Two Arrays I, II (Javascript) 배열의 겹치는 부분을 찾는 문제다. 1은 여러번 겹쳐도 하나만 리턴하면 되고, 2는 여러번 겹치면 여러개를 리턴해야 한다. Intersection of Two Arrays I var intersection = function(nums1, nums2) { const answer = [] for (n1 of nums1) { if(nums2.includes(n1)){ answer.push(n1) } } return Array.from(new Set(answer)); }; nums1 배열을 반복을 돌면서 nums2에도 있다면 삭제하고 answer 배열에 담는 방식으로 풀었다. var intersection = function(nums1, nums2) { const answer = nums1.filter((n1).. 2020. 7. 20.
[LeetCode] 189. Rotate Array (Javascript) k번만큼 배열 앞에서 뒤로 아이템을 옮기는 문제다. var rotate = function(nums, k) { for(let i = 0; i < k; i++) { const pop = nums.pop(); nums.unshift(pop); } return nums; }; 문제 흐름대로 k번 반복을 돌며 pop과 unshift를 해도 되지만 var rotate = function(nums, k) { const spliced = nums.splice(nums.length - k, nums.length); nums.unshift(...spliced); return nums; }; k개만큼 떼서 한번에 unshift하는게 훨씬 낫다. 2020. 7. 20.
var vs let vs const var let const 스코프 함수 블록 블록 변수 재선언 O X X 재할당 O O X 할당하지 않고 선언만 하기 O O X 변수 선언 전 호출시 undefined ReferenceError ReferenceError 2020. 7. 19.
[HackerRank 30 Days of Code] Day 5 ~ Day 7 Day 5 : Loops 주어진 n의 구구단을 출력하면 된다. function main() { const n = parseInt(readLine(), 10); for(let i = 1; i 2020. 7. 13.
[Typescript] 제네릭(Generic)을 사용하는 이유 일단 나는 제네릭이라는 용어 자체를 몰랐다. 제너레이터랑 헷갈렸을 정도니까. 꺾쇠, 타입 키워드를 듣고도, 아. Array 말하는건가? 그거 그냥 string[]과 동일한 문법의 한 종류 아닌가? 생각했다. IDE에서 알려주는 정보 모달에서 라고 되어있는 것도 그냥 여기에 타입을 넣으세요~ 라는 의미인줄 알았는데... 제네릭을 진작 알았다면, 타입 정의의 새로운 세계가 열렸을텐데 참 아쉽다. 제네릭은 함수나 클래스에서 사용할 타입을 외부에서 유동적으로 지정해줄 수 있는 것을 말한다. 특정 타입을 사용할 것이지만, 그 타입을 유동적으로 지정할 수 있다. 예를들면 아래와 같이 사용할 수 있다. 리스폰스에 페이지네이션 정보와 함께 데이터 배열을 보내는 경우는 흔히 있다. 이때 totalItem, current.. 2020. 7. 10.