전체 글 68

[코딩테스트] 약수의 개수와 덧셈

문제 두 정수 left와 right가 매개변수로 주어집니다. left 부터 right 까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. 해결 function solution (left, right) { const arr = [] return Array .from({length : (right - left) + 1}, (_, i) => left + i) .map((item, i) => { const length = [] arr.push(item) for (let i = 0; i cur % 2 ? acc - arr[i] : acc + arr[i], 0) } 다른 사람의 풀이를 보니 굉장히 어렵게 푼 것 ..

코딩테스트 2023.12.22

[TypeScript] 객체지향 설계원칙 SOLID

S(SRP. 단일책임원칙) 클래스는 하나의 책임만 가져야 한다. O(OCP. 개방폐쇄원칙) 클래스는 확장에 대해서 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. 클래스의 기존 코드를 변경하지 않고도 기능을 확장할 수 있어야 한다. 인터페이스나 상속을 통해 해결할 수 있다. L(LSP. 리스코프 치환 원칙) 서브타입은 기반이 되는 슈퍼타입을 대체할 수 있어야 한다. 자식 클래스는 부모 클래스의 기능을 수정하지 않고도 부모 클래스와 호환되어야 한다. I(ISP. 인터페이스 분리 원칙) 클래스는 자신이 사용하지 않는 인터페이스의 영향을 받지 않아야 한다. 해당 클래스의 무의미한 메소드 구현은 피해야 합니다. D(DIP. 의존성 역전 원칙) 하위 수준 모듈(구현 클래스) 보다 상위 수준 모듈(인터페이스..

TypeScript 2023.12.21

[TypeScript] 타입스크립트 클래스(class) 정리

객체는 클래스를 기반으로 생성되며 instance라고도 불린다. class Person { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } sayHello() { console.log(`안녕하세요! 제 이름은 ${this.name}이고, 나이는 ${this.age}살 입니다.`) } } const person = new Person('Spartan', 30); person.sayHello(); (1) 생성자 (constructor) 생성자는 클래스의 인스턴스를 생성하고 초기화하는데 사용되는 메서드. 클래스 내에서 오직 하나만 존재할 수 있다. (2) 접근 제한자 a. ..

TypeScript 2023.12.19

[TypeScript] 개요

컴파일러란? 1. 타입검사 2. 에러메시지 해석할 때 도움 3. 코드변환 (tsc: TypeScript > JavaScript) 4. 최적화 tsc란? tsc = TypeScript 컴파일러 TypeScript는 JavaScript로 변환되어야 코드를 실행할 수 있다. 정적언어 (=컴파일 언어)는 기계어로 변환이 되어야 한다. 동적언어 (=인터프리터 언어)는 엔진이 코드를 한 줄씩 실행하면서 동적으로 해석합니다. 그래서 동적언어는 오류가 나면 런타임에러가 나는 것이고 정적 언어는 실행 전 사전에 기계어로 변환을 하는 과정에서 오류를 잡아낼 수 있는 것이다. tsc 명령어 tsc --init // tsconfig.json이 생성되는 명령어 tsc index.ts // index.ts를 컴파일 tsc src..

TypeScript 2023.12.19

[코딩테스트] 수박수박수박수박수박수?

문제 길이가 n이고, "수박수박수박수...." 와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다. 해결 const solution = (n) => Array .from({length: n}, (_, i) => i % 2 ? '박' : '수') .join("") 배열을 n의 길이만큼 만들고 홀수일 경우 '박' , 짝수일 경우 '수' 를 붙이게 하였다. 그러고 join 메서드로 배열을 합쳐주니 해결되었다. join에서 , 쉼표도 함께 나오는 문제가 있었다. 안에 "" 큰따옴표를 붙여주니 사라졌다. 다른 사람의 풀이 var waterMelon = n =>'수박'.repeat(n/2) + (n%2 =..

코딩테스트 2023.12.15

[코딩테스트] 가운데 글자 가져오기

문제 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어보세요. 단어의 길이가 짝수라면 가운데 두 글자를 반환하면 됩니다. 해결 function solution (s) { const i = s.length / 2 return s.length % 2 === 0 ? s.slice(i-1, i+1) : s.substring(Math.floor(i), Math.ceil(i)) } s 의 length를 2로 나누어 몫이 0이 된다면 짝수이기 때문에 삼항연산자를 통해서 true일 경우 slice 인덱싱을 통해 2글자가 나오도록 +1, -1을 해주었고 false일 경우 length / 2는 소수점이 나오기 때문에 반내림 반올림을 통해 인덱싱을 해주었다. 다른 사람의 풀이 function solution..

코딩테스트 2023.12.14

[코딩테스트] 제일 작은 수 제거하기

문제 정수를 저장한 배열, arr에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr가 [4, 3, 2, 1]인 경우는 [4, 3, 2]만 리턴하고, [10]이면 [-1]을 리턴합니다. 해결 function solution (arr) { const target = Math.min(...arr) const answer = arr.filter((item) => item !== target) return answer == '' ? [-1] : answer } 처음에 sort와 slice로 인덱싱을 통해 가장 작은 수를 배출했는데 배열의 순서가 지켜지지 않아 오답이 났다. 찾아보니 Math.m..

코딩테스트 2023.12.13

[코딩테스트] 없는 숫자 더하기

문제 0부터 9까지의 숫자 중 일부가 들어있는 정부 배열 numbers가 매개변수로 주어집니다. numbers 에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. 해결 function solution (number) { let answer = 0 for (let i = 0; i el === i)) { console.log(i); answer += i; } } return answer; } 처음에 answer 변수 선언을 const로 했더니 answer += i 하는 코드에서 오류가 났다. let으로 바꿔주니까 됐다! const로 하면 재정의가 안돼서 += 연산자가 안먹..

코딩테스트 2023.12.12

[코딩테스트] 핸드폰 번호 가리기

문제 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요. 해결 function solution (phone_number) { return phone_number .slice(0, -4) .replace(/[0-9]/g,"*") + phone_number .substring(phone_number.length - 4) } slice로 뒤 4번째 인덱스 전까지 문자열을 자른다. replace로 숫자를 모두 *로 치환한다. 그리고 substring으로 length - 4를 하면 뒤의 4자리..

코딩테스트 2023.12.07