728x90
반응형

CS 42

옵저버 패턴 (Observer Pattern)

주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 알려주는 디자인 패턴 주체란? 객체의 상태 변화를 보고 있는 관찰 옵저버들이란? 이 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 "추가 변화 사항"이 생기는 객체들을 의미 옵저버 패턴은 다른 디자인 패턴과 다르게 일대다 (one-to-many) 의존성을 가진다. 옵저버 패턴의 특징 애플리케이션이 한정된 시간, 특정한 케이스에만 다른 객체를 관찰해야하는 경우 대상 객체의 상태가 변경될 때마다 다른 객체의 동작을 트리거해야할 때 한 객체의 상태가 변경되면 다른 객체도 변경해야할 때 MVC 패턴 Model 과 View 의 관계는 옵저버 패턴의 Subject 역할과 Observer 역..

CS/디자인 패턴 2023.09.11

전략 패턴 (Strategy Pattern)

전략 패턴는 정책 패턴(policy pattern)이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 '직접' 수정하지 않고 전략이라고 부르는 '캡슐화한 알고리즘' 을 컨택스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴 쉽게 말하면 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장 class Crawler { dataScrape(site: string) { if (site === 'naver') { console.log('naver') } else if (site === 'google') { console.log('google') ..

CS/디자인 패턴 2023.09.11

팩토리 패턴 (Factory Pattern)

객체를 사용하는 코드에서 객체 생성 부분을 떼어내어 추상화한 팬턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스 에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴 팩토리 메소드 패턴 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 하위 클래스에서 결정 (즉, 클래스 인스턴스 생성은 하위 클래스에게 맡기는 것) 추상 팩토리 패턴 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성 (new 지시자를 사용하여 구상 클래스를 만드는 것) 자바스크립트에서의 팩토리 패턴 const factory1 = new Object(10); const factory2 = new Object('전다훈'); fac..

CS/디자인 패턴 2023.09.11

싱글톤 (Singleton Pattern)

싱글톤 패턴이란? 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이우에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴 프로그램 내에서 하나의 객체만 존재 프로그램 내에 여러 곳에서 해당 객체를 공유받아 사용해야하는 경우 싱글톤 패턴의 장점 1. 메모리 측면의 이점 싱글톤 패턴을 사용하게 될 경우 한 개의 인스턴스만을 사용하기 때문에 메모리 낭비를 방지할 수 있다. 2. 속도 측면의 이점 생성된 인스턴스를 사용할 때마다 이미 생성된 인스턴스를 활용함으로 속도 측면에 이점이 있다. 3. 데이터 공유가 쉽다. 전역으로 사용하는 인스턴스이기 때문에 다른 여러 클래스에서 데이터를 공유하여 사용할 수 있다. 💡 경험 웹 사이트 크..

CS/디자인 패턴 2023.09.11

[Javascript] 두 개 뽑아서 더하기

문제 설명 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한사항 ) numbers의 길이는 2 이상 100 이하입니다. numbers의 모든 수는 0 이상 100 이하입니다. 입출력 예 ) numbers result [2,1,3,4,1] [2,3,4,5,6,7] [5,0,2,7] [2,5,7,9,12] 작성한 코드 /** * @param numbers * @returns {*[]} */ function solution(numbers) { const arr = []; for(let i = 0; i < numbers.length; i++)..

CS/알고리즘 2022.02.26

[Javascript] 2016년

문제 설명 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN, MON, TUE, WED, THU,FRI, SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요. 제한사항 ) 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다) 입출력 예 ) a b result 5 24 "TUE" 정답코드 /** * * @param a: Month * @param b: Day * @returns {strin..

CS/알고리즘 2022.02.26

[Javascript] 예산

문제 설명 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요. 제한사항 ) d는 부서별로 신청..

CS/알고리즘 2022.02.19

[Javascript] 3진법 뒤집기

문제 설명 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한 사항 ) n은 1 이상 100,000,000 이하인 자연수입니다. 입출력 예 ) n result 45 7 125 229 정답 코드 /** * * @param n: 매개변수 * @returns {number} */ function solution(n) { const num = n.toString(3); const result = num.split('').reverse().join(''); return parseInt(result,3); } toString( ) 문법(Syntax) : number.toString(radix);..

CS/알고리즘 2022.02.01

[Javascript] 약수의 개수 덧셈

문제 설명 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. 제한 사항) 1 ≤ left ≤ right ≤ 1,000 입출력 예 ) left right result 13 17 43 24 27 52 정답 코드 /** * * @param left: 시작 * @param right: 마지막 * @returns {number} * 약수의 개수: 짝수 -> + , 홀수 -> - */ function solution(left, right) { return divisor(number(left,right)); } function numbe..

CS/알고리즘 2022.02.01

[Javascript] 실패율

문제 설명 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로..

CS/알고리즘 2022.01.17
728x90
반응형