빈도수 세기sameFrequencysameFrequency라는 함수를 작성하세요. 두 개의 양의 정수가 주어졌을 때, 두 숫자의 자릿수가 같은 빈도를 갖는지 구합니다. 예시 sameFrequency(182,281) // truesameFrequency(34,14) // falsesameFrequency(3589578, 5879385) // truesameFrequency(22,222) // false 내가 작성한 코드function sameFrequency(num1, num2) { const str1 = String(num1); const newArr1 = Array.from(str1); newArr1.sort((a, b) => a - b); const str2 = String(num2); co..
분할 정복 패턴주로 배열이나 문자열 같은 큰 규모의 데이터셋을 처리한다.(연결리스트나 트리가 될 수 있다.) 값을 찾기 위해 배열의 왼쪽에서 시작하여 오른쪽 끝까지 이동하는 것보다는배열을 작은 조각으로 세분화하여 각 조각들을 어디로 이동시킬지 결정하는 작업을 하겠다.즉! 큰 데이터 덩어리를 작은 조각으로 나누는것 예시탐색 알고리즘의 대표적인 예로, 정렬된 숫자 배열을 이용하는 방법이 있다.배열은 반드시 정렬된 상태여야 한다. 주어진 search 함수는 특정 값을 입력으로 받아, 그 값이 배열에서 위치한 인덱스를 반환한다.search([1,2,3,4,5,6],4) // 3 function search(arr, val) { for (let i = 0; i o(n)의 시간복잡도이다. 이 구조를 선형 탐색이..
기준점 간 이동 배열 패턴배열이나 문자열과 같은 일련의 데이터를 입력하거나 특정 방식으로 연속적인 해당 데이터의 하위 집합을 찾는 경우에 유용하다. sliding window 접근법창문을 하나 만들어야 한다. 창문은 단일변수, 하위배열, 또는 필요한 경우 다른 문자열도 될 수 있다. 조건에 따라 창문을 이동시키며, 시작 위치에서 시작하면 보통 왼쪽에서 오른쪽으로 이동한다. 오른쪽에서 왼쪽으로 이동도 가능하고 가운데 위치에서 시작할 수 있다. 그러나 보통 창문을 왼쪽, 즉 요소의 시작 위치 또는 배열이나 문자열의 시작 위치에서 끝나는 위치로 이동한다. 규모가 큰 데이터셋에서 데이터의 하위 집합을 추척하는 문제에 유용하다.예시 문제정수의 배열과 n이라는 수를 받아들이는 maxSubarraySum이라는 함수..
다중 포인터 패턴인덱스나 위치에 해당하는 포인터 또는 값을 생성하고 특정 조건에 따라 시작, 끝, 또는 중간으로 이동한다.공간 복잡도를 최소화하며 문제를 효율적으로 해결하는 데 매우 유용하다.👉🏻 배열이나 문자열과 같은 일종의 선형 구조나 이중 연결 리스트나 단일 연결 리스트를 만든다.👉🏻 한 쌍의 값이나 조건을 충족시키는 무언가를 찾는다.[-4, -3, -2, -1, 0, 1, 2, 5]"alksjdalksjdlkasjdlks" 참조값이란 인덱스를 가리키는 숫자인 i와 j같은 변수를 의미한다.i와 j를 시작하여 특정방향으로 이동할 수 있게 참조값을 사용하기도 한다. 포인터 변수는 배열이나 문자열의 특정 위치를 가리킨다.(포인터 변수는 두번째도 있으므로 서로를 향해 이동하거나 같은 방향으로 이동하..
빈도수 세기 패턴객체나 Set을 활용하여 값의 빈도나 횟수를 저장하는 방식이렇게 하면 중첩 반복문 없이도 시간 복잡도 O(N^2)를 피할 수 있다. 문제 두 개의 배열을 입력받는 same이라는 함수를 작성이 함수는 첫 번째 배열의 각 값이 두 번째 배열에서 제곱된 값으로 존재하는 경우에 true를 반환해야 합니다.값의 빈도도 동일해야 합니다.same([1,2,3], [4,1,9]) // truesame([1,2,3], [1,9]) // falsesame([1,2,1], [4,4,1]) // false (must be same frequency)내가 풀은 방법더보기function same(arr1, arr2) { // 배열 오름차순 정렬 arr1.sort((a, b) => a - b); arr2.so..
알고리즘이란?특정 작업을 달성하기 위한 과정이나 일련의 단계를 의미 실력 향상 방법문제 해결을 위한 계획 만들기(문제에 접근하는 방법, 문제를 세분화하기 위한 전략)일반적인 문제 패턴을 파악 문제 해결 전략문제 이해문제를 내 방식대로 다시 말할 수 있는가? 문제를 해결하기 위해 어떤 입력이 필요한가?문제를 해결하면 어떤 출력이 나와야 하는가?출력을 입력에서 결정할 수 있는가? 즉, 문제를 해결하기에 충분한 정보가 있는가? (이 질문은 문제를 해결하려는 과정에서야 답할 수 있을 수도 있지만, 지금 이 단계에서 이 질문을 고려하는 것도 여전히 중요하다.)중요한 데이터 요소들을 어떻게 라벨링해야 할까?구체적 예시를 알아보기간단한 예시로 시작더 복잡한 예시들로 진행빈 입력값이 있는 예제를 살펴보는것잘못된 입력..
🤓 선수 지식으로는 빅오 표기법의 개념이 필요하다.(빅오 표기법: https://recordoftheday.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B9%85%EC%98%A4%ED%91%9C%EA%B8%B0%EB%B2%95) 객체의 빅오 표기객체는 언제 사용하냐정렬의 필요가 없을때빠른 접근, 입력과 제거를 원할function addUpTo(n) { let total = 0; for (let i = 1; i 빅오의 객체 표기입력 - O(1)객체에 키와 값을 추가하는 빅오 표기제거 - O(1)객체의 키를 제거하기 위한 빅오 표기탐색 - O(n)접근 - O(1)객체의 키에 접근하기 위한 빅오 표기탐색은 희귀하지만, O(N)은 N에 따라서 ..
빅오표기법빅오표기법는 대략적으로 숫자를 세는 것이다. 입력된 내용이 늘어날 수록 알고리즘에 실행 시간이 어떻게 변하는지 설명해주는 방식이다. 어떤 function의 입력 값이 늘어나는 것과 function 실행 시간이 변하는 관계를 의미한다.알고리즘의 성능 평가를 하기 위해서 사용하드웨어의 영향을 받지 않는다. 즉, 입력의 크기와 실행시간의 관계를 의미(f(n)=n) | n의 값이 커질수록 실행시간도 늘어난다.(f(n)=n*n | 실행시간이 n의 제곱일 수도 있다. f(n) = 1 | n이 커져도 실행 시간에는 아무런 영향을 받지 않기에 항상 상수일 수 있다. (간단하게 표현하기 위해 1로 표시)f(n)이 완전이 다를 수도 있다. 빅오 표기법의 필요성여러가지 코드를 일반적으로 서로 비교하고 성능을 평가..