목록개발/algorithm (175)
며칠 간 filter / some / map 등과 같은 배열함수와 이중 반복문으로 풀려다가 의외로 단순히 풀렸다. 2,6,8 의 최소공배수나, 12, 8의 최소공배수가 같다는 특징때문이었는데, 이 덕분에 이전에 사용해봤던 알고리즘으로 최소공배수를 구하는 유클리드 호제법을 콜백 함수로 활용했다. function solution(arr) { function callback(n, m) { // 유클리드 호제법 let a = n let b = m while (b !== 0){ let temp = a%b a = b b = temp } return (n*m)/a } let result = arr.reduce((a,c)=>{ return callback(a,c) // 콜백 },1) return result }
정규표현식에 대해 간단히 다뤄본다. 문제 설명 기존의 풀이 방식 function solution(s) { let a = ['zero','one','two','three','four','five','six','seven','eight', 'nine'] for(let i = 0 ; i < a.length ; i ++){ s = s.replaceAll(a[i],i) } return Number(s) } 배열을 만들어 둔 뒤, replaceAll 을 활용하였다. 정규표현식을 활용한 방식 function solution(s){ let a = ['zero','one','two','three','four','five','six','seven','eight', 'nine'] // s = s.replace(/number..
문제 - 실패율 function solution(N, stages) { let obj = {} // 객체로 정리 for(let i = 1 ; i
재귀함수 재귀함수는 어떤 함수 내부에서 자기 자신을 부르는 함수이다. 어떤 측면에서는 조건을 만족하기 전까지 무한히 반복하는 while 문과 닮아있다. 재귀함수는 두 가지 조건을 충족해야 한다. 자기 자신을 함수 내에서 반드시 return 해야 한다. 무한히 실행되는 것을 방지하기 위해 종료 조건문을 작성해야 한다. // 재귀함수 예시 function recursion () { if()// 종료 조건문 recursion() // 자기자신 실행 } 어떤 면에서는 이게 말이 되는 문법인가 싶긴 하지만, 조건을 추가해주면 가능하다. 직접 만들어본 문제 전달인자 s(5)에 대해 반복적으로 1씩 차감한다고 할 때, 's
문제 풀이에 사용된 메서드 : new Array(length) / fill / map function solution(x, n) { return new Array(n).fill(x).map((a,i)=>a*(i+1)) } solution(2,5)// 테스트 코드 [ 2, 4, 6, 8, 10 ] // 1. new Array(n) 으로 n개 만큼 배열 내 공간 생성 // 2. fill을 통해 생성된 배열에 x로 공간을 모두 채움 // 3. map을 통해 배열마다 x만큼의 간격을 줌 fill 메서드는 처음 써본 것 같은데, 편한 기능이다. ^_^ 재밌다 알고리즘
두 정수 사이의 합을 구하는 문제이다. 해당 문제를 풀이하기 위해 활용한 메서드 : new Array(length) / fill / map / reduce 문제 설명 풀이 방식 function solution(a, b) { let arr = new Array(Math.abs(b-a)+1) .fill(ax+i) return arr.reduce((q,w)=>{ return q+w }) } // 1. new Array의 길이로 Math(b-a)+1 만큼 설정 // 2. 해당 배열을 a,b 둘 중 작은 값으로 채움 // 3. 채워진 값마다 1씩 증가시켜 map으로 리턴 // 4. 배열 안에 채워진 값을 reduce를 통해 누산시켜 반환 보다 쉬운 풀이 방법도 있겠지만, reduce 메서드를 써보고 싶었다.