카일_

ROOT

Project/BUSGO

[BUSGO] 1일 시간표 작성 테스트

어제 밤에 서버와 클라이언트를 켜두고 오늘 새벽부터 운행 할 버스의 시간을 자동으로 기록하도록 해놨다. 운행이 감지된 첫차 5시 10분부터 시간표에 차곡차곡 작성되었다. 이제 하루치 시간표를 가지고 UI를 작성하고 백그라운드에서 자동으로 시간표가 채워지는 기능을 구현해봐야지.

Algorithm/프로그래머스

프로그래머스 | #Lv1 "시저 암호"

문제 설명 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요. 제한 조건 공백은 아무리 밀어도 공백입니다. s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다. s의 길이는 8000이하입니다. n은 1 이상, 25이하인 자연수입니다. 나의 풀이 // Programmers | #Lv1 "시저 암호" function caesarCipher(s, n) { // 대문자와 소문자 알파벳을 상수로 선언 const upper =..

Programming/TypeScript

[TS] 타입스크립트의 유용한 기능과 종류

Type Guards(타입가드) Type Guards(타입가드)는 타입스크립트에서 변수의 타입을 보다 구체적으로 유추할 수 있도록 하는 기능이다. 이를 통해 코드의 가독성과 안정성을 높일 수 있다. Type Guard에는 다음과 같은 종류가 있다. typeof Type Guards typeof Type Guards는 JavaScript의 typeof 연산자를 사용하여 변수의 타입을 검사하는 것이다. 예를 들어, 다음과 같이 사용할 수 있다. function printValue(value: string | number) { if (typeof value === 'string') { console.log(`Value is a string with length ${value.length}`); } else {..

Programming/TypeScript

[TS] 타입 쿼리(Type Query)

Type Query(타입 쿼리) Type Query(타입 쿼리)는 특정 타입(Type)을 가져오는 방법이다. 즉, 타입 쿼리를 사용하면 변수, 함수 또는 클래스 등에 대한 타입 정보를 가져올 수 있다. 타입 쿼리는 다음과 같은 두 가지 방법으로 사용할 수 있다. typeof 연산자를 사용하여 변수 또는 함수의 타입 정보를 가져오기 예를 들어, 다음과 같은 코드가 있다고 가정해보자. const person = { name: "John", age: 30 }; function getPersonInfo(person: { name: string; age: number }): void { console.log(`${person.name} is ${person.age} years old`); } 여기서 typeof ..

Programming/TypeScript

[TS] 제네릭(Generic)

Generic(제네릭) Generic(제네릭)은 함수, 클래스, 인터페이스 등의 타입을 일반화하여 재사용성을 높이는 기능이다. 즉, 타입스크립트에서 일반적으로 사용되는 타입을 구체적인 타입으로 대체하여 코드의 재사용성과 유연성을 높일 수 있다. 제네릭을 사용하면 함수나 클래스의 매개변수 또는 반환값의 타입을 미리 지정하지 않고, 실행 시점에 동적으로 타입을 결정할 수 있다. 이를 통해 다양한 타입의 인수를 전달하고 다양한 타입의 값을 반환하는 함수를 만들 수 있다. 제네릭은 대괄호() 안에 타입 변수를 사용하여 정의된다. 이 타입 변수는 일반적으로 대문자로 표시되며, 사용자가 지정하는 타입이다. 예를 들어, 다음은 제네릭 함수를 정의하는 방법이다. function identity(arg: T): T { ..

Programming/TypeScript

[TS] 데코레이터(Decorator)

Decorator 패턴 Decorator 패턴은 객체 지향 디자인 패턴 중 하나로, 객체에 동적으로 새로운 기능을 추가하기 위한 방법이다. 데코레이터 패턴을 사용하면 객체의 수정 없이도 객체의 기능을 확장하고, 코드의 재사용성과 유연성을 높일 수 있다. 타입스크립트에서는 데코레이터 패턴을 사용하여 클래스, 메소드, 프로퍼티 등에 데코레이터를 적용할 수 있다. 데코레이터는 클래스, 메소드, 프로퍼티 앞에 @ 기호를 붙이며, 함수로 구현된다. 데코레이터 함수는 대상이 되는 클래스, 메소드, 프로퍼티를 인자로 받으며, 이들을 수정하거나 대체할 수 있다. 예를 들어, 아래와 같은 클래스가 있다고 가정해보자. class Car { drive() { console.log("Driving"); } } 이 클래스에 데..

Programming/TypeScript

[TS] 클래스의 디자인 패턴 - 2

Command 패턴 Command 패턴은 객체 지향 디자인 패턴 중 하나로, 어떤 작업을 수행하는 명령(Command)을 캡슐화하여 실행할 수 있는 객체로 만들고, 이를 조합하여 원하는 기능을 수행하는 방식을 제공하는 패턴이다. 타입스크립트에서는 Command 패턴을 구현하기 위해 다음과 같은 단계를 따른다. Command 인터페이스 정의하기 Command 인터페이스는 명령(Command)을 수행하는 메소드 execute를 가지고 있다. 이 인터페이스를 구현하는 클래스들은 execute 메소드를 구현하여 각각의 명령을 수행한다. interface Command { execute(): void; } Command 구현하기 Command 인터페이스를 구현하여 각각의 명령(Command)을 구현한다. 이때 각..

Programming/TypeScript

[TS] 클래스의 디자인 패턴 - 1

Singleton 패턴 Singleton 패턴은 애플리케이션 내에서 단 하나의 인스턴스만을 가지도록 보장하는 디자인 패턴이다. 이 패턴을 사용하면 전역 변수를 사용하지 않고, 객체 인스턴스를 공유하여 리소스를 절약할 수 있다. Singleton 패턴을 구현하는 방법은 다음과 같다. Singleton 클래스 생성 Singleton 패턴을 구현하기 위해, 먼저 Singleton 클래스를 생성한다. 이 클래스는 단 하나의 인스턴스만을 가질 수 있도록, private 생성자를 가지고 있다. class Singleton { private static instance: Singleton; private constructor() {} public static getInstance(): Singleton { if (!..

Programming/TypeScript

[TS] 클래스(Class)

Class(클래스) Class(클래스)는 객체를 생성하기 위한 템플릿(Template)이다. 클래스를 사용하면 객체의 속성과 메소드를 묶어서 쉽게 관리할 수 있다. TypeScript에서 클래스를 정의하는 방법은 다음과 같다. class ClassName { // 속성과 메소드 정의 } 위의 코드에서 ClassName은 클래스의 이름이다. 중괄호({}) 안에는 클래스가 가지는 속성(properties)과 메소드(methods)를 정의한다. 속성은 클래스의 데이터를 나타내며, 메소드는 클래스에서 수행하는 동작을 나타낸다. class Person { name: string; age: number; constructor(name: string, age: number) { this.name = name; thi..

Algorithm/프로그래머스

프로그래머스 | #Lv1 "행렬의 덧셈"

문제 설명 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요. 제한 조건 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다. 나의 풀이 // Programmers | #Lv1 "행렬의 덧셈" function solution(arr1, arr2) { let answer = []; for (let i = 0; i < arr1.length; i++) { let sum = []; for (let j = 0; j < arr1[i].length; j++) { sum.push(arr1[i][j] + arr2[i][j]); } answer...