본문 바로가기

자바스크립트

(25)
[Javascript] 자바스크립트 디자인 패턴 항해 플러스 과제를 실행하는데 디자인 패턴이 나왔다. 들어만 봤지 실제로 해본 적은 없어서 헷갈리기도 했다.그래서 디자인패턴은 무엇인지, 왜 사용하는지 이번 기회에 한 번 정리해보려 한다.  1. Desing Pattern(디자인 패턴)디자인 패턴은 소프트웨어 개발 과정에서 자주 발생하는 문제들을 해결하기 위한 일반적이고 재사용 가능한 해결책을 말한다. 자바스크립트에서 주로 사용하는 디자인 패턴에는 Module Pattern(모듈 패턴), Observer Pattern(옵저버 패턴), Factory Pattern(팩토리 패턴), Singleton Pattern(싱글톤 패턴), Facade Pattern(퍼사드 패턴), Proxy Pattern(프록시 패턴) 등이 있다.   해당 포스팅에서는 모듈 패턴, ..
[자바스크립트] 실행 컨텍스트, 스코프와 클로저, 호이스팅, this 항해 플러스 과제를 진행하기 전 알아야하는 필수 지식을 미리 공부하려고 한다.이번 주제는 Exeution Context(실행 컨텍스트)이다.취준 시절 공부했던 내용이지만 3년이 지나면서 다 까먹어버려서 다시 공부한다ㅠ 1. Exeution Context(실행 컨텍스트) 란?실행 컨텍스트는 함수를 호출했을 때 실행될 수 있는 환경과 그 결과를 저장하는 영역을 말한다. 실행컨텍스트는 실행 가능한 코드를 만났을 때 생성되며, 실행 가능한 코드에는 함수코드, 글로벌 코드, eval 코드가 해당된다.   실행컨텍스트에는 위와 같이 구성되어 있는데 여기서 중요한 것은"Lexical Environment(렉시컬 환경)",  "Declaration Binding Instantiation(This 바인딩)" 이다. 렉시..
[코딩테스트] minSubArrayLen, 슬라이딩 윈도우 알고리즘 문제. 슬라이딩 알고리즘 - MinSubArrayLen  위 문제는 주어진 배열의 합이 숫자랑 같거나 큰 경우, 해당 배열합의 최소 길이를 반환하는 문제이다. 즉, array와 sum이 주어지면 array 요소의 합이 sum보다 크거나 같은 최소 길이를 반환하면 된다.이때 array 요소는 인접한 요소여야 한다.  슬라이딩 윈도우 알고리즘을 통해 해결해야 하며, 시간복잡도는 O(n) 공간복잡도는 O(1)이여야 한다. 처음에 어떻게 풀어야 할지 감이 안왔다. while문을 이용해서 한 칸씩 늘려가야 겠다는 생각을 하긴 했는데, 어떻게 늘려가야 하지? 라는 고민이 계속 들었다.  결국 시간이 지나도 문제를 맞추지 못해서 답안을 확인했다.  *슬라이딩 윈도우 알고리즘 : 배열의 한 부분을 정의하고, 이 부분을..
[코딩테스트] 수열 추측하기, 순열 & 이항계수 응용 1. 문제 가장 윗줄에 1부터 N까지의 숫자가 한 개씩 적혀 있다. 그리고 둘째 줄부터 차례대로 파스칼의 삼각형처럼 위의 두개를 더한 값이 저장되게 된다. 예를 들어 N이 4 이고 가장 윗 줄에 3 1 2 4 가 있다고 했을 때, 다음과 같은 삼각형이 그려진다. 3 1 2 4 4 3 6 7 9 16 N과 가장 밑에 있는 숫자가 주어져 있을 때 가장 윗줄에 있는 숫자를 구하는 프로그램을 작성하 시오. 단, 답이 여러가지가 나오는 경우에는 사전순으로 가장 앞에 오는 것을 출력하여야 한다. - 첫째 줄에 두개의 정수 N(1≤N≤10)과 F가 주어진다. N은 가장 윗줄에 있는 숫자의 개수를 의미하며 F는 가장 밑에 줄에 있는 수로 1,000,000 이하이다. - 첫째 줄에 삼각형에서 가장 위에 들어갈 N개의 숫..
[코딩테스트] 조합의 경우의 수(메모이제이션) 1. 문제. 우선 nCr = n-1Cr-1 + n-1Cr 공식이 어떻게 성립하는지부터 알아보자. n개의 서로 다른 원소 중 r개를 선택하는 경우의 수를 찾을 땐, 두 가지 경우가 발생한다. 하나는 선택된 원소를 포함하는 경우이고, 하나는 포함하지 않는 경우이다. 특정 원소를 이미 선택했다고 가정하면, 남은 n-1개의 원소 중, r-1개를 더 선택해야 하므로 경우의 수는 n-1Cr-1이 된다. 반대로 선택하지 않은 경우라면, n-1개의 원소 중, r개를 선택해야 하므로 경우의 수는 n-1Cr이 된다. 따라서 n개의 원소 중 r개를 선택하는 경우의 수는, 두 경우의 수를 합한 n-1Cr-1 + n-1Cr가 된다. 2. 문제 풀이 function solution(n, r){ let answer; let dy=..
[코딩테스트] 재귀로 팩토리얼 구현하기 1. 문제 자연수 N을 입력하면, N! 값이 출력되도록 만드시오. 1) 팩토리얼 팩토리얼은 n이 자연수일 때, 1부터 n까지의 자연수의 곱을 의미한다. n!으로 표시한다. 예를 들어, 5! = 5*4*3*2*1 = 120이다. 이는 5! = n*(n-1)*(n-2)... 이런 식으로 나타낼 수 있다. 위 식을 활용하면 재귀함수를 통해 간단하게 팩토리얼을 구현할 수 있다. 2. 풀이 function solution(n) { let answer; function DFS(n) { if (n === 1) return 1 else return n * (DFS(n - 1)); } answer = DFS(n); return answer } console.log(solution(5)); 팩토리얼 만드는 방법은 간단하다..
[코딩테스트] 재귀로 순열 구하기 1. 문제 : 순열 구하기 10 이하의 N개의 자연수가 주어지면 이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력합니다. 순열은 주어진 집합에서 일부 원소를 순서대로 나열하는 것을 말한다. 중복 순열과 달리, 집합에서 각 원소들이 겹치면 안 된다. 2. 풀이 function solution(m, arr) { let answer = []; const n = arr.length; const ch = Array.from({ length: n }, () => 0); let tmp = []; function DFS(l) { if (l === m) { answer.push(tmp.slice()); } else { for (let i = 0; i < n; i++) { if (ch[i] === 0) { ch[i] ..
[코딩테스트] 중복순열 구하기 (feat. javascript) 1. 문제 1부터 N까지 번호가 적힌 구슬이 있습니다. 이 중 중복을 허락하여 M번을 뽑아 일렬로 나열하는 방법을 모두 출력합니다. 첫 번째 줄에 자연수 N(3