javascript

    Observer Pattern

    Observer Pattern

    이 글은 Patterns.dev 사이트를 참고하여 작성한 시리즈 입니다. Observer Pattern 옵저버블을 사용해 이벤트가 발생할 때 구독자에게 알리기 옵저버 패턴을 사용하면 특정 객체(object)나 옵저버(observer)를 옵저버블(observable)이라 불리는 다른 객체를 구독(subscribe)할 수 있습니다. observable 객체는 일반적으로 3가지 중요한 요소를 포함합니다. observers: 특정 이벤트가 발생할 때마다 알림을 받는 observer 배열 subscribe(): observers에 observer를 추가하는 메소드 unsubscribe(): observers에서 observer를 삭제하는 메소드 notify(): 특정 이벤트가 발생할 때마다 모든 observer..

    알고스팟 게임판 덮기 [ TypeScript, JavaScript ]

    알고스팟 게임판 덮기 [ TypeScript, JavaScript ]

    문제 문제 코드: BOARDCOVER algospot.com :: BOARDCOVER 게임판 덮기 문제 정보 문제 H*W 크기의 게임판이 있습니다. 게임판은 검은 칸과 흰 칸으로 구성된 격자 모양을 하고 있는데 이 중 모든 흰 칸을 3칸짜리 L자 모양의 블록으로 덮고 싶습니다. 이 algospot.com 풀이과정 - 나올 수 있는 블록 모양을 한 점을 기준으로 좌표로 나타냈습니다. - 문제를 풀기위한 변수들을 초기화 및 세팅해주었습니다. - 블럭을 놓을 수 있는지 확인 및 되돌리기 위한 함수를 작성했습니다. - 빈 칸을 만날때까지 for문을 돌고 빈 칸 만났을 경우 탐색을 하는 재귀문을 작성하였습니다. 코드 TypeScript JavaScript

    알고스팟 Hello World! [ TypeScript, JavaScript ]

    알고스팟 Hello World! [ TypeScript, JavaScript ]

    문제 문제 코드: HELLOWORLD algospot.com :: HELLOWORLD Hello World! 문제 정보 문제 예의 바른 프로그래머들은 인사를 잘 합니다. 프로그래밍 언어를 배우면서 처음으로 짜는 프로그램이 항상 Hello World! 인 것만 봐도 알 수 있지요. AOJ 의 첫 문제에서도 www.algospot.com 풀이과정 알고스팟을 처음 사용할 때 기본 입출력을 확인하기 위한 문제였습니다. 앞으로 풀 문제를 위한 세팅을 하는 과정을 거쳤습니다. TypeScript 세팅 https://velog.io/@ansrjsdn/TypeScript-설치-및-설정 TypeScript 설치 및 설정 타입스크립트를 실행하기 위해서는 nodejs가 설치되어 있어야 한다. 그리고 원하는 폴더로 가서 설정..

    프로그래머스 코딩테스트 연습 Level1 - 문자열 내 p와 y의 개수 [ javascript ]

    프로그래머스 코딩테스트 연습 Level1 - 문자열 내 p와 y의 개수 [ javascript ]

    코딩테스트 연습 - 문자열 내 p와 y의 개수 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 programmers.co.kr 정규표현식을 사용해 최대한 짧게 처리해보려 했으나 (p가 없을 때, y가 없을때) false, (py 둘 다 없을 때를 다르게)true로 처리해줘야해서 조건문으로 나누었습니다. const solution = s => { if (!s.match(/[py]/gi)) return true; if (!s.match(/p/gi) || !s.match(/y/gi)) return false; return..

    프로그래머스 코딩테스트 연습 Level1 - 약수의 개수와 덧셈 [ javascript ]

    프로그래머스 코딩테스트 연습 Level1 - 약수의 개수와 덧셈 [ javascript ]

    코딩테스트 연습 - 약수의 개수와 덧셈 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주 programmers.co.kr n의 약수는 1, x, x, x..., n 이렇게 양쪽으로 짝이 생기면서 생기고 정수의 제곱근 값이 존재하는 경우는 짝이 존재하지 않는 약수가 됩니다. 그래서 정수의 제곱근 값이 없는 경우는 약수의 개수가 짝수가 되고 정수의 제곱근이 있는 경우는 약수의 개수가 홀수가 됩니다. const solution = (left, right) => { let answer = 0; for (let i = left; i

    프로그래머스 코딩테스트 연습 Level1 - 실패율 [ javascript ]

    프로그래머스 코딩테스트 연습 Level1 - 실패율 [ javascript ]

    코딩테스트 연습 - 실패율 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스 programmers.co.kr 조건에 맞춰서 배열을 생성해서 실패율을 구한 후 인덱스를 기록하고 정렬하였습니다. const solution = (N, stages) => { let userLen = stages.length; return stages .reduce((arr, stage) => { if (stage { const t = el / userLen; userLen -= el; return { loss: t, idx }; }) .sort((a, b) => b.loss - a.loss)..

    프로그래머스 위클리 챌린지 4주차 - 직업군 추천하기 [ javascript ]

    프로그래머스 위클리 챌린지 4주차 - 직업군 추천하기 [ javascript ]

    코딩테스트 연습 - 4주차_직업군 추천하기 개발자가 사용하는 언어와 언어 선호도를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다. 아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수를 부 programmers.co.kr 정렬을 위한 데이터를 뽑아내고 조건에 맞게 정렬하였습니다. const solution = (table, languages, preference) => { return table .map(r => { const row = r.split(" ").reverse(); const name = row.pop(); const score = languages.reduce( (acc, language, idx) => (acc += (row.indexOf(lan..

    프로그래머스 위클리 챌린지 6주차 - 복서 정렬하기 [ javascript ]

    프로그래머스 위클리 챌린지 6주차 - 복서 정렬하기 [ javascript ]

    코딩테스트 연습 - 6주차 복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요 programmers.co.kr 비교할 데이터를 객체 배열로 map한 후 sort를 통해 문제의 조건에 맞게 정렬하였습니다. const winningPoint = { N: 0, L: 0, W: 1 }; const getWinningRate = head => Array.from(head).reduce((acc, winning) => (acc += winningPoint[winning]), 0) / (head.length - head.match(/N/g).lengt..

    소인수분해 알고리즘 [ javascript ]

    소인수분해 알고리즘 [ javascript ]

    입력된 값 n을 소인수분해하여 배열로 return하는 알고리즘입니다. const primeFactors = n => { const answer = []; // 2로 나눠지면 계속 나누기 while (n % 2 === 0) { answer.push(2); n /= 2; } // 3부터 루트n까지 나눌 수 있으면 나누기 for (let i = 3; i * i 2) answer.push(n); return answer; }; console.log(primeFactors(10)); // [2, 5] console.log(primeFactors(12)); // [2, 2, 3] console.log(primeFactors(100)); // [2, 2, 5, 5] console.log(primeFactors(987..

    소수 판별 알고리즘 [ javascript ]

    소수 판별 알고리즘 [ javascript ]

    n이 소수면 true 소수가 아니면 false를 return 하는 코드입니다. 2와 3을 제외한 모든 소수는 6k±1의 형태를 지닙니다. function isPrime(n) { if (n