CATEGORY 113

[디자인 패턴] 옵서버 패턴 (Observer Pattern) / 자바스크립트, 프록시 객체

옵서버 패턴 (Observer Pattern) 관찰자가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 객체에 상속되어 있는 다른 객체들(옵서버)에게 전달하는 패턴 이벤트 기반 시스템 / MVC 패턴에 사용됨 주로 분산된 시스템 간에 이벤트를 생성 / 발행 (Publish)하고, 이를 수신(Subscribe)해야 할 때 사용 관찰자 : 객체의 상태 변화를 감지하는 관찰자 옵서버 : 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 '추가 변화 사항'이 생기는 객체들 예제 옵서버 생성 // 옵서버 클래스 (base) class Observer { constructor(user) { this.user = user.name; } notify(message) { console.log(`User..

STUDY/CS 2023.01.10

[디자인 패턴] 전략 패턴 (Strategy Pattern) / 자바스크립트

전략 패턴 (Strategy Pattern) 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴 하나의 클래스가 많은 행동들을 정의하고, 클래스 연산 안에서 복잡한 다중 조건문의 모습을 취하는 경우 사용 독립적으로 원하는 알고리즘 선택하여 사용 클라이언트에 영향 없이 알고리즘 변경 예제 // Strategy Interface class MovableStrategy { constructor(strategy) { this.way = strategy.way; } move() { console.log(`${this.way}를 통해 이동합니다.`) } } // Concrete Strategies class RailStrategy extends MovableStrategy { con..

STUDY/CS 2023.01.09

[프로그래머스_자바스크립트] Lv.2 [1차] 뉴스 클러스터링

[Javascript_ 뉴스 클러스터링] 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📢 문제 📢 자카드 유사도는 집합 간의 유사도를 검사하는 여러 방법 중의 하나로 알려져 있다. 두 집합 A, B 사이의 자카드 유사도 J(A, B)는 두 집합의 교집합 크기를 두 집합의 합집합 크기로 나눈 값으로 정의된다. 예를 들어 집합 A = {1, 2, 3}, 집합 B = {2, 3, 4}라고 할 때, 교집합 A ∩ B = {2, 3}, 합집합 A ∪ B = {1, 2, 3, 4}이 되므로, 집합 A, B 사이의 자카드 유사도 J(A, B) = 2/4 = 0.5가..

STUDY/Algorithm 2023.01.09

[프로그래머스_자바스크립트] Lv.2 K진수에서 소수 개수 구하기

[Javascript_ k진수에서 소수 구하기] 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📢 문제 📢 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우 0P처럼 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우 P처럼 소수 양쪽에 아무것도 없는 경우 단, P는 각 자릿수에 0을 포함하지 않는 소수입니다. 예를 들어, 101은 P가 될 수 ..

STUDY/Algorithm 2023.01.08

[디자인 패턴] 팩토리 패턴 (Factory Pattern) - 팩토리 메소드, 추상 팩토리 / 자바스크립트

팩토리 패턴 (Factory Pattern) 객체 생성 부분을 분리하여 추상화한 패턴 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위클래스에서 객체 생성에 관한 구체적인 내용 결정 객체들 간 의존관계 분리하기 위함 팩토리 메소드 패턴, 추상 팩토리 패턴 장점 상 / 하위 클래스를 분리하여 결합도를 감소시키고 유지 보수성을 증가시킨다. 유연성 및 확장성 증가 단점 객체 생성 시 새로운 클래스 필요 # 팩토리 메소드 패턴 (Factory Method Pattern) 객체 생성 처리를 서브 클래스로 분리하여 처리하도록 캡슐화하는 패턴 추상화를 통해 상위 클래스를 제공하고, 상세한 구현은 하위 클래스로 위임 비슷한 객체를 반복적으로 생성새야 하는 경우 사용 예제 class Coffe..

STUDY/CS 2023.01.08

[디자인 패턴] 싱글톤 패턴 (Singleton Pattern) / 자바스크립트

싱글톤 패턴 (Singleton Pattern) 전체 시스템에서 클래스에 대해 오직 하나의 인스턴스만 가지도록 하는 객체 생성 패턴 하나의 객체를 생성하면 생성된 객체를 어디서든 참조 가능 인스턴스에 집적적인 접근 차단 예제 1 : 즉시 실행 함수 (IIFE) + 클로저 (Closure) 즉시 실행 함수 : 함수를 정의하자마자 바로 호출되는 함수 (초기화코드, 라이브러리 내 전역 변수의 충돌방지 등에 사용) let Singleton = (function () { let instance; // instance 비공개 변수 function init() { // 비공개 메서드 return { publicMethod: function () { // public 메서드 return {name: 'yejin', a..

STUDY/CS 2023.01.07

[프로그래머스_자바스크립트] Lv.2 멀리 뛰기 / 동적 계획법 (Dynamic Programming)

[Javascript_ 멀리뛰기] 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📢 문제 📢 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 제한 사항 n은 1 이상, 2000 이하인 정수입니다. ❗ 아이디어 - 1번째 전 값에 2번째 전 값을 더하면 현재 값이 나온다. # 처음 풀이 function solution(n) { let..

STUDY/Algorithm 2023.01.07

[프로그래머스_자바스크립트] Lv.2 점프와 순간이동

[Javascript_ 점프와 순간이동] 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📢 문제 📢 OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈트는 건전지로 작동되는데, 순간이동을 하면 건전지 사용량이 줄지 않지만,앞으로 K 칸을 점프하면 K 만큼의 건전지 사용량이 듭니다. 그러므로 아이언 슈트를 착용하고 이동할 때는 순간 이동을 하는 것이 더 효율적입니다. 아이언 슈트 구매자는 아이언 슈트를 착용하고..

STUDY/Algorithm 2023.01.06

[프로그래머스_자바스크립트] Lv.2 귤 고르기

[Javascript_ 귤고르기] 📢 문제 📢 경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다. 경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine이 매개변수로 주어집니다. 경화가 귤 k개를 고를 때 크기가 서로 다른 종류의 수의 최솟값을 return 하도록 solution 함수를 작성해주세요. 제한사항 1 ≤ k ≤ tangerine의 길이 ≤ 100,000 1 ≤ tangerine의 원소 ≤ 10,000,000 ❗ 아이디어 - 귤의 개수를 내림차순으로 정렬하고 순..

STUDY/Algorithm 2023.01.05

[프로그래머스_자바스크립트] Lv.2 조이스틱

[Javascript_ 조이스틱] 📢 문제 📢 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다음 알파벳 ▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로) ◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서) ▶ - 커서를 오른쪽으로 이동 (마지막 위치에서 오른쪽으로 이동하면 첫 번째 문자에 커서) 만들고자 하는 이름 name이 매개변수로 주어질 때, 이름에 대해 조이스틱 조작 횟수의 최솟값을 return 하도록 solution 함수를 만드세요. 제한 사항 name은 알파벳 대문자로만 이루어져 있습니다. name..

STUDY/Algorithm 2023.01.03