filter를 반복 호출하는 대신 groupBy로 배열을 한 번만 순회해 그룹화하고, 키로 데이터에 바로 접근하는 방법을 정리했습니다.
2022. 7. 29.Frontend해시 테이블을 활용해 프로그래머스 베스트 앨범 문제를 타입스크립트로 풀어봅니다.
2022. 5. 16.Frontend재귀 함수로 이진 트리의 대칭 여부를 판별하는 LeetCode Symmetric Tree 문제를 풀어봅니다.
2022. 5. 14.그 어떤 소수도 제곱근보다 큰 수로 나눠지지 않기 때문에 index를 제곱하여 모든 인덱스를 순회하는것보다 시간 복잡도를 개선하고 나머지 값이 0이 반환되면 소수가 아니고 반환되면 소수 → 숫자 하나만의 소수를 판별할때는 가장 효율적임
typescriptconst getPrimes = (num:number) => { const prime = [false,false,...Array(num-1).fill(true)]; for(let i=2; i*i<=num;i+=1) { if(prime[i]) { //2 부터 시작 //2의 배수 -> 즉 4부터 모두 false로 (배수들은 다 소수가 아니기 때문) for(let j=i*2; j<=num; j+=i) { prime[j] =false; } } } //[false, false, true, true, false, true] return prime } console.log(getPrimes(5))
에라토스테네스의 체를 사용.
0과 1을 소수가 아니기 때문에 배열에서 false로 만들고 나머지는 일단 기본값으로 true를 설정
2부터 시작하여 특정 수의 배수를 모두 지운다. 즉 2부터 시작하면 하단 반복문에서 2의 배수가 모두 false로 소수가 아님을 나타냄. 똑같은 방식으로 계속 반복한다.
그럼 true인것의 인덱스 값들이 소수이며,
위의 결과값은 2,3,5가 소수로 나오고 소수의 총 갯수를 구하려면 return prime.filter((boolean)=>boolean === true).length를 하면된다.