목록전체 글 (84)
Cherry & Cherish

자바스크립트 알고리즘 연습을 위해, Python3으로 풀이 후 Javascript로 변환하는 과정을 기록하고 있습니다. 문제 : 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 제한사항 numbers는 길이 1 이상 7 이하인 문자열입니다. numbers는 0~9까지 숫자만으로 이루어져 있습니다. "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다. 접근 : n의 크기가 1,000,000까지이기 때문에 효율성 검사를 고려한 풀이가 필요한..

자바스크립트 알고리즘 연습을 위해, Python3으로 풀이 후 Javascript로 변환하는 과정을 기록하고 있습니다. 문제 숫자나라 기사단의 각 기사에게는 1번부터 number까지 번호가 지정되어 있습니다. 기사들은 무기점에서 무기를 구매하려고 합니다. 각 기사는 자신의 기사 번호의 약수 개수에 해당하는 공격력을 가진 무기를 구매하려 합니다. 단, 이웃나라와의 협약에 의해 공격력의 제한수치를 정하고, 제한수치보다 큰 공격력을 가진 무기를 구매해야 하는 기사는 협약기관에서 정한 공격력을 가지는 무기를 구매해야 합니다. 예를 들어, 15번으로 지정된 기사단원은 15의 약수가 1, 3, 5, 15로 4개 이므로, 공격력이 4인 무기를 구매합니다. 만약, 이웃나라와의 협약으로 정해진 공격력의 제한수치가 3이고..

자바스크립트 알고리즘 연습을 위해, Python3으로 풀이 후 Javascript로 변환하는 과정을 기록하고 있습니다. 문제 : 다트 게임 카카오톡 게임별의 하반기 신규 서비스로 다트 게임을 출시하기로 했다. 다트 게임은 다트판에 다트를 세 차례 던져 그 점수의 합계로 실력을 겨루는 게임으로, 모두가 간단히 즐길 수 있다. 갓 입사한 무지는 코딩 실력을 인정받아 게임의 핵심 부분인 점수 계산 로직을 맡게 되었다. 다트 게임의 점수 계산 로직은 아래와 같다. 1) 다트 게임은 총 3번의 기회로 구성된다. 2) 각 기회마다 얻을 수 있는 점수는 0점에서 10점까지이다. 3) 점수와 함께 Single(S), Double(D), Triple(T) 영역이 존재하고 각 영역 당첨 시 점수에서 1제곱, 2제곱, 3제..

이 글은 이펙티브 타입스크립트 '아이템 31 타입 주변에 null값 배치하기'를 정리한 글입니다. strictNullChecks 설정을 처음 켜면 null이나 undefined 값 관련된 오류들이 갑자기 나타난다. 이 오류를 해결하기 위해 코드 전체에 if 구문을 추가해야 한다고 생각할 수 있다. 어떤 변수가 null 이 될 수 있는지 없는지를 타입만으로는 명확하게 표현하기 어렵기 때문 예를 들어, B가 A로부터 비롯되는 값이라고 하자. A가 null이 될 수 없을 때, B역시 null이 될 수 없고, 그 반대가 A가 null이 될 수 있다면, B역시도 null이 될 수도 있다. 이 관계들이 겉으로 드러나지 않기 때무에 혼란스럽다. 값이 전부 null이거나, 전부 null이 아닌 경우로 분명히 구분된다면..

이 글은 이펙티브 타입스크립트 '아이템 30 문서에 타입 정보를 쓰지 않기'를 정리한 내용입니다. “코드와 주석이 맞지 않는다면, 둘 다 잘못된 것이다” 타입스크립트의 타입 구문 시스템은 간결하고, 구체적이며, 쉽게 읽을 수 있도록 설계되었다. 즉, 함수의 입력과 출력의 타입을 코드로 표현하는 것이 주석보다 더 나은 방법이다. 타입 구문은 타입스크립트 컴파일러가 체크해주기 때문에, 절대로 구현체와의 정합성이 어긋나지 않는다. 누군가 강제하지 않는 이상 주석은 코드와 동기화되지 않는다. 예를 들어, 함수를 변경했을 때 주석을 갱신하는 것을 강제하지 않는다면 주석을 변경하지 않는 일이 발생할 수 있다. 하지만, 타입구문은 타입스크립트 타입 체커가 타입 정보를 동기화하도록 강제한다. 결과적으로 주석 대신 타입..

이 글은 이펙티브 타입스크립트 '아이템 14 타입 연산과 제너릭 사용으로 반복 줄이기'를 정리한 글입니다. 코드를 짤 때는 같음 코드를 반복하지 말라는 DRY (don’t repeat yourself) 원칙이 있다. 타입에서도 같은 원칙을 적용해야 한다. 타입 중복은 많은 문제를 발생시킨다. 방법 1 : 타입에 이름 붙이기 function distance(a: { x: number; y: number }, b: { x: number; y: number }) { return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2)) } //상수를 사용해서 반복을 줄이는 기법 적용 interface Point2D { x: number y: number } fun..

이 글은 이펙티브 타입스크립트 '아이템 13 타입과 인터페이스의 차이점 알기'를 정리한 글입니다. 타입스크립트에서 명명된 타입을 정의하는 방법은 두 가지가 있다. 클래스를 사용할 수도 있지만, 클래스는 값으로도 쓰일 수 있는 자바스크립트 런타임 개념이다. (아이템 8에서 설명했음) 대부분의 경우 타입을 사용해도 되고, 인터페이스를 사용해도 된다. 타입과 인터페이스 사이에 존재하는 차이를 명확히 알고 같은 상황에서 동일한 방법으로 명명된 타입을 정의해 일관성을 유지해야 한다. 1. type 키워드 사용 type TState = { name : string; capital : string; } 2. 인터페이스 사용 interface IState { name: string; capital: string; } ..

이 글은 이펙티브 타입스크립트 '아이템 12 함수표현식에 타입 적용하기'를 정리한 글입니다. 자바스크립트에서는 함수 ‘문장’과 함수 ‘표현식’을 다르게 인식한다. function rollDice1(sides: number) : number {/* ... */} //문장 const rollDice2 = function(sides: number) : number {/* ... */} //표현식 const rollDice3 = (sides: number) : number => {/* ... */} //표현식 타입스크립트에서는 함수 표현식을 사용하는 것이 좋다. 함수의 매개변수부터 반환값까지 전체를 함수 타입으로 선언해 함수 표현식에 재사용할 수 있다는 장점이 있기 때문이다. 장점1 : 함수 타입의 선언은 불필..