일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 알고리즘
- array
- ftech
- 자바스크립트
- 코딩
- 포스기
- underbar
- this
- 공부
- 취업
- method
- 초보
- 개발
- vscode
- grpahQL
- JavaScript
- 리액트
- react
- underscores
- Instantiation Patterns
- 일상
- 코드스테이츠
- 엔퀸즈
- 해커톤
- nqueens
- 클라이언트
- 연습
- DOM
- JS
- 제일어려워
- Today
- Total
목록Study JS for me/Algorithm (16)
analogcoding
재귀함수란 ? 함수는 함수 안에서 자기 자신을 다시 호출하는 것. 재귀함수를 사용하는 이유 1. 알고리즘 자체가 재귀적으로 표현할 때 가독성이 좋다. 2. 변수 사용을 줄여 준다. 재귀함수의 단점 메모리를 많이 차지하며 성능이 반복문에 비해 느리다. 재귀함수의 사용예제 Factorial 1부터 정수 n까지의 정수를 모두 곱하는 것. 반복문을 사용한 factorial function factorial(number) { let result = 1; for (var i = number; i >= 1 ; --i ){ result *= i; } return result; } // factorial(5) 의 경우 i는 1,2,3,4,5 이므로 1*2*3*4*5 = 120. 재귀함수를 사용한 factorial fun..
문제. 인자로 받는 배열의 요소가 이 전 요소들의 총합보다 큰 수로만 이루어져있으면 true , 아니면 false 를 리턴. Ex) input : [1,3,6,15,32,70] => output : true input : [1,2,4,5,7,12,15] => output : false 해결방안. 1. 배열의 요소와 그 앞전 요소의 총합을 비교. 2. for문과 sum을 사용. 3. Boolean 값 리턴. sum 이라는 누적값을 받을 변수를 설정하고 정해진 요소 전까지의 누적값과 그 다음 요소의 값을 비교해서 Boolean 값으로 리턴한다. function arrSum(arr){ let sum = 0; for(let i = 0 ; i < arr.length; i++){ sum += arr[i] if(su..
문제. 인자로 받는 숫자의 각 자릿수를 반복적으로 곱해서 한자리수로 만들 때까지의 곱한 수를 리턴. Ex) 39 => 3. ㄴ 한자리 수가 될 때까지 반복 곱셈 : 3 * 9 = 27 => 2 * 7 = 14 => 1 * 4 = 4 . 총 3번 곱셈. 해결방안. 1-1. input num을 문자열로 바꾼 뒤 나눠서 각 자릿수를 곱할 수 있게 만듬. 1-2. 한자리수가 될 때까지 곱하는 조건을 while문으로 주고 곱할 때마다 카운트해서 카운트를 리턴. 2-1. 값이 0인 카운트를 전역변수로 생성. 2-2. input 숫자 num의 자릿수가 한 자리수라면 그대로 카운트를 리턴. 2-3. 아니라면 카운트++ 2-4. input num을 문자열로 바꾼 뒤 나눠서 각 자릿수를 곱한 값을 인자로 재귀함수로 만들어..
문제. 인자로 받는 문자열이 각기 다 다른 알파벳으로 이루어져있다면 true , 중복된 알파벳이 있으면 false를 리턴. Ex) input : "Dermatoglyphics" => output : true input : "aba" / "moOse" => output : false 해결방안. 1. input 값의 대소문자 상관없이 구분. 2. 각 글자들을 비교해서 중복된 글자가 있는지 확인. 3. Boolean 값 리턴. 첫 번째 솔루션. underscore 에 uniq함수를 활용해서 해결한 솔루션. input값을 대소문자 구분없이 만들고 배열로 나눠준다. 하나 씩 값을 넣어서 비교를 위한 빈 배열을 생성한다. var isIsogram = function(str) { str = str.toLowerCas..
문제. 인자로 받는 문자열의 첫 글자들을 대문자로 변경한 뒤 리턴. Ex) input : "hello world" => output : "Hello World" input : "javascript is sexy" => output : "Javascript Is Sexy" 해결방안 1. 공백으로 구분된 단어를 배열로 나눔. 2. 첫 글자만 toUpperCase()를 사용해서 대문자로 변경. 3. 다시 문자열로 합친 뒤 리턴. split(' ') 메소드를 써서 공백으로 구분 된 단어 요소로 나누어준다. var letterCapitalize = function(str) { str = str.split(' '); map() 함수를 이용해서 elements의 0번째 요소를 대문자로 변경하고 남은 elements에..
문제. 인자로 받는 문자열의 숫자가 2의 제곱수면 true를 아닐 경우 false를 리턴. Ex) input : 2 , 4 , 8 , 16 , 32 , 64 , 128 ... => output : true input : 1 , 22 , 27 , 222 ... => output : false 해결방안. 1. input값을 숫자로 받기. 2. for문을 사용해서 input을 2의 i ( i는 input보다 작게 ) 제곱과 비교. 3. Boolean 값 리턴. iput을 숫자로 변환하고 i 번 제곱할 i 를 설정해준다. var powerOfTwo = function(str) { var num = Number(str); // 숫자로 변환 for(let i = 1 ; i < num ; i++){ // input이..
문제. 인자로 받는 문자열의 알파벳을 알파벳의 고유 index로 리턴. Ex) input : "The sunset sets at twelve o' clock." => output : "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11" 해결방안. 1. 대소문자 구분 없이 작동하게 만들기. 2. 알파벳의 고유 index를 찾기 위해 알파벳 배열 만들기. 3. 문자열을 각 요소로 만들어 배열로 담기. 4. 특수문자나 공백 걸러내기. 5. iput으로 오는 배열의 요소를 알파벳 배열에 indexOf를 사용해서 index 찾기. 6. 다시 문자열로 리턴. 먼저 함수를 생성하고 input의 값을 소문자로 통일하고 각 배열로 나눠준다. ..
문제. 인자로 받는 문자열의 값이 연속된 홀수일 경우 홀수와 홀수 사이에 '-'를 입력한 후 리턴. Ex) input : '454793' => output : '4547-9-3' 해결방안. 1. 문자열을 하나씩 분리해서 배열에 각 요소를 담음. 2. 값이 홀수인지 확인. 3. 연속된 문자열 또한 홀수일시 '-' 추가. 4. 다시 배열을 문자열로 합침. 먼저 문자열을 인자로 받는 함수를 만들어준다. var DashInsert = function(str){ } 문자열을 분리해서 배열로 만들고 for문과 if문으로 값이 홀수인지 확인. str = str.split('') for(let i = 0; i < str.length; i++){ if(Number(str[i])%2!==0 && Number(str[i+1..