✅ frequency counter(빈도 카운터)란?
주어진 배열 속 요소의 빈도를 확인하는 문제
- worst : 중첩 for문
- best : 객체 사용
의사코드
A배열의 각 요소의 제곱이 B요소에 포함되었는지 확인하시오 (갯수도 같아야 함)
👍best
시간 복잡도 : O(n)
A 순회해서 {요소: 개수, ...} 객체 만듬
B 순회해서 {요소: 개수, ...} 객체 만듬
A객체의 key 순회해서 B객체 값과 비교
같지 않으면 return false
순회 마쳤으면 return true
👎worst
시간 복잡도 : O(n^2)
for A 순회
B.indexOf(n) 찾아서 삭제
없으면 return false
순회 마쳤으면 return true
문제 풀이
주어진 두 숫자가 같은 숫자, 같은 빈도를 가지고 있는지 확인하는 함수를 작성하시오.
function sameFrequency(a,b){ a = a.toString(); b = b.toString(); if(a.length !== b.length) return false; let objA = {}; let objB = {}; for(let i = 0; i < a.length; i++) { objA[a[i]] = (objA[a[i]] || 0) + 1; } for(let i = 0; i < b.length; i++) { objB[b[i]] = (objB[b[i]] || 0) + 1; } for(let key in objA) { if(objA[key] !== objB[key]) return false; } return true; }
배열 안의 중복 여부를 확인하는 함수를 작성하시오.
function areThereDuplicates(...args) { let obj = {}; for(let i = 0; i < args.length; i++) { if(obj[args[i]]) return true; else obj[args[i]] = 1; } return false; }
- 다중포인터 사용
function areThereDuplicates(...args) { // Two pointers args.sort((a,b) => a > b); let start = 0; let next = 1; while(next < args.length){ if(args[start] === args[next]){ return true } start++ next++ } return false }
- set 사용
function areThereDuplicates() { return new Set(arguments).size !== arguments.length; }
- 다중포인터 사용
참고
'Computer Science > Algorithm' 카테고리의 다른 글
[알고리즘] javascript 문제해결 패턴 - Sliding Window (기준점 간 이동) (0) | 2022.07.27 |
---|---|
[알고리즘] javascript 문제해결 패턴 - Multiple Pointers (다중 포인터) (0) | 2022.07.26 |
[알고리즘] 다이나믹 프로그래밍(동적 계획법) - javascript (0) | 2022.06.14 |
[알고리즘] 하노이의 탑 - javascript (0) | 2022.06.10 |
[알고리즘] 타일링 - javascript (0) | 2022.05.31 |