알고리즘 13

Two Pointer | 투포인터 알고리즘

1. 투포인터 Two Pointers 배열, 문자열같은 선형구조에서 다른 두 곳을 가리키며 원하는 값을 찾아가는 방법이다. 2. Nested loop ,2 loop를 쓴다면 배열이나 문자열이 길이가 109318390481290357982590182409840192가 된다면 시간복잡도 O(N^2) 공간복잡도 O(1) 가 되어 소요되는 시간이 기하급수적으로 올라가게된다. 3. Two pointer pattern을 사용하자 4. 주어진 배열에서 연속된 배열의 합이나 특정값을 구할때 사용한다.

Sliding window | 슬라이딩 윈도우 알고리즘

1. 슬라이딩 윈도우 알고리즘이란? 윈도우(특정범위)가 있을때 배열이나 내부 요소의 값을 윈도우로 이동하며 해결하는 알고리즘이다 1. 위의 파란색 범위를 윈도우라고 한다. 2. 윈도우를 이동을 하며 배열을 탐색한다. 2. 배열에서 연속하는 요소들을 연산하려고 할때 쉽게 중첩된 for loop를 이용해서 구하기 쉬운데 O(n^2)을 가지게 되어 효율성에서 많이 문제가 생긴다. 3. 이럴때 슬라이딩 윈도우 알고리즘을 이용한다 배열이나 문자열같은 선형구조에서 일정범위값이 있을때 // 예 ) 배열이 있을때 배열에서 연속하는 5개 요소의 합중 최대값을 리턴한다. // [1, 3, 2, 9, 0, 1, 2, 5, 7, 8, 3] 연속하는 5개의 요소를 이동하며 합을 구하게 된다. [1, 3, 2, 9, 0, 1, ..

최소공배수 구하기 | LCM | Least Common Multiple

최소 공배수는 두 수의 곱 에 두수의 최대공약수를 나눈것이다. 2023.02.05 - [알고리즘/문제를 풀어보쟈] - 최대 공약수 구하기 | GCD | Greatest Common Divisor 최대 공약수 구하기 | GCD | Greatest Common Divisor const getGCD = (num1, num2) =>{ let gcd = 1; for(let i =1; i 두 숫자 다 나눠질때를 의미한다. -> 최대공약수이다. 9. 그렇다면 i를 gcd에 해준다. 10. 그리고 gcd를 리턴한다. 다른 좋은 방법을 찾아보자.. ✨ 유클 diary-of-lemon.tistory.com const GCD = (a,b) => { if(b===0) return a; else return GCD(b,a%b)..

최대 공약수 구하기 | GCD | Greatest Common Divisor

const getGCD = (num1, num2) =>{ let gcd = 1; for(let i =1; i 두 숫자 다 나눠질때를 의미한다. -> 최대공약수이다. 9. 그렇다면 i를 gcd에 해준다. 10. 그리고 gcd를 리턴한다. 다른 좋은 방법을 찾아보자.. ✨ 유클리드 호제법 ✨ 2개의 자연수의 최대공약수를 구하는 알고리즘이다. a>b일때 a를b로 나눈 나머지를 r이라고 할때 GCD(a,b) ===GCD(b,r)은 같고 r이 0이면 이때 b가 최대공약수다. GCD(24,16) -> 일때 24를 16으로 나눈 나머지는 8이다. 그러면 GCD(16,8) 이 되고 GCD(16,8) -> 일떄 16을 8로 나눈 나머지는 0이된다. 나머지가 0이 됐을때 나눈 8, r이 최대공약수가 되는것이다. const..

트리(Tree)자료구조

브라우저 렌더링 과정을 읽던중 트리형 자료 구조를 정리해야할것같아서 간단히 정리해본다! 우선 자료구조를 간단히 알아보자! 자료구조란? 데이터의 효율적인 접근, 수정을 하게하는 데이터의 집합, 구조를 말한다. 트리 (Tree) 노드로 이루어진 계층적 구조를 표현할 수 있는 자료구조이다. 한 노드가 여러 노드를 가르킬 수 있는 비선형적 구조로 되어있다. (비선형 구조: Nonlinear Structure->하나의 자료 뒤에 여러개의 자료가 존재 할 수 있는것을 의미함. 예: 트리, 그래프 ) 트리에서는 순서정보가 중요하지 않다. 이산수학에서 나오는 트리의 개념과 같다. 1. 하나의 루트 노드를 갖는다. 2. 루트 노드는 0개이상의 자식 노드를 갖는다. 3. 노드와 노드를 연결하는 edge로 구성되어있다. 4..

서울에서 김씨 찾기...

대체 얼마나 많을까..? .. 근데 찾으라니까 찾아본다 문제해결 function solution(seoul) { const answer = `김서방은 ${seoul.findIndex((element)=>element==='Kim')}에 있다`; return answer; } findIndex를 이용해서 찾았다. 주어진 함수를 이용해 만족하는 배열의 첫번째 요소의 인덱스를 리턴한다. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex 개선점 indexOf()를 써서 풀 수 도 있다 indexOf()는 배열에서 지정된 요소를 찾아 첫번째 인덱스를 리턴한다. 존재하지 않는다면 -1을 리턴한다. ..

약수를 더해보자!

문제해결 function solution(n) { let answer = 0; let answerArray = []; for (let i = 1; i a+b); return answer; } // 약수는 나눠지는 모든숫자. (기억 잘 안남 틀리면 고쳐주세여ㅠ) // 따라서 자기자신까지 for문을 돌려서 나눠서 나머지가 0이 되는 숫자들을 구함. // 배열안에 나머지가 0이 되는 숫자들을 push하고 // reduce를 이용해 더해준뒤 answer로 리턴해줌. 테스트 1 〉통과 (0.05ms, 30.1MB) 테스트 2 〉통과 (0.06ms, 29.9MB) 테스트 3 〉통과 (0.09ms, 30.1MB) 테스트 4 〉통과 (0.07ms, 30.1MB) 테스트 5 〉통과 (0.10ms, 29.8MB) 테스트 ..