빈도수 세기(frequency counter)는 문자열에서 문자별 갯수를 판단하기 위한 알고리즘이다.
일반적으로 object로 다룬다.
문제1
Write a function called sameFrequency. Given two positive integers, find out if the two numbers have the same frequency of digits.
Time: O(N)
Sample Input:
sameFrequency(182,281) // true
sameFrequency(34,14) // false
sameFrequency(3589578, 5879385) // true
sameFrequency(22,222) // false
두 개의 정수를 입력받아 같은 숫자로 구성되어있는지 찾는 문제이다.
처음 든 생각
1. 숫자의 종류, 개수 모두 일치해야하니깐 객체로 각 숫자별 개수를 파악해야겠다.
2. 그 다음 두 개의 객체를 비교하면서 숫자별 개수가 같은지 확인해야겠다.
function sameFrequency(a,b){
// 문자열로 바꾸어서 자릿수 하나씩 판단할 수 있게
a= String(a)
b= String(b)
// 빈 객체 선언
let objA = {}
let objB = {}
for(let i of a){
// 이미 키 값이 존재하고 있다면 value 값을 1 더해주고 아니라면 1로 세팅
objA[i] = (objA[i] | 0) + 1
}
for(let k of b){
objB[k] = (objB[k] | 0) + 1
}
for(let j in objA){
// 값이 존재하지 않으면 다르니깐 false
if(!objB[j]){
return false
}
// 개수가 다르면 false
if(objB[j] !== objA[j]){
return false
}
}
return true
}
빈 객체를 불러와서 하나씩 루프를 돌아가면서 문자 : 개수 가 담긴 객체를 만들어주고 그 결과값을 비교해주는 문제였다.
문제2
Implement a function called, areThereDuplicates which accepts a variable number of arguments, and checks whether there are any duplicates among the arguments passed in. You can solve this using the frequency counter pattern OR the multiple pointers pattern.
Examples:
areThereDuplicates(1, 2, 3) // false
areThereDuplicates(1, 2, 2) // true
areThereDuplicates('a', 'b', 'c', 'a') // true
Restrictions:
Time - O(n)
Space - O(n)
여러 개의 변수를 받아서 그 중 겹치는 애가 있는지 없는지 확인하는 문제이다.
처음 든 생각
1. 일단 매개변수의 형태가 고정되어있지 않으니 비구조화 할당을 통해서 ...로 묶어서 배열로 만들어줘야겠다.
2. 객체로 각 원소별 개수를 넣어줘야겠다.
3. 객체 안의 내용을 확인하면서 1보다 큰 값이 애가 있는지 없는지만 판단하면 되네.
function areThereDuplicates(...args) {
let obj = {}
// 각 원소별 개수 파악
for(let a of args){
obj[a] = (obj[a] | 0) + 1
}
// 개수가 들어있는 객체를 돌면서 1보다 큰 값이 있는지 없는지 확인
for(let k in obj){
if(obj[k] >1){
return true
}
}
return false
}
각 자릿수, 원소 별로 개수를 따져야할 때는 객체를 만들어 반복문을 통해서 개수에 대한 정보를 담아줄 수 있다.
'스터디 > 코딩테스트' 카테고리의 다른 글
javascript 코딩테스트 - 슬라이딩 윈도우 (0) | 2023.07.20 |
---|---|
javascript 코딩테스트 - 다중 포인터 (0) | 2023.07.14 |
javascript 코딩테스트 - 소수 만들기 (0) | 2023.04.15 |
javascript 코딩테스트 - 기능개발 (0) | 2023.04.08 |
javascript 코딩테스트 - 같은 숫자는 싫어 (0) | 2023.04.07 |