1. 문제
sameFrequency라는 함수를 작성하세요. 두 개의 양의 정수가 주어졌을 때, 두 숫자의 자릿수가 같은 빈도를 갖는지 구합니다.
여러분의 솔루션은 반드시 다음과 같은 복잡성을 가져야 합니다.:
Time: O(N)
예시 인풋:
- sameFrequency(182, 281) //true
- sameFrequency(34, 14) //false
- sameFrequency(3589578, 5879385) //true
- sameFrequency(22, 222) //false
2. 내 해결책
const sameFrequency = (num1, num2) => {
let num1_arr = num1.toString().split("");
let num2_arr = num2.toString().split("");
if(num1_arr.length !== num2_arr.length) return false;
let num1_obj = {};
let num2_obj = {};
for(let i = 0; i < num1_arr.length; i++){
num1_obj[num1_arr[i]] === 1 ? num1_obj[num1_arr[i]] += 1 : num1_obj[num1_arr[i]] = 1;
}
for(let i = 0; i < num2_arr.length; i++){
num2_obj[num2_arr[i]] === 1 ? num2_obj[num2_arr[i]] += 1 : num2_obj[num2_arr[i]] = 1;
}
for(let i in num1_obj){
if(num1_obj[i] !== num2_obj[i]){
return false;
}
}
return true;
}
sameFrequency(3589578, 5879385)
3. 다른 해결책
function sameFrequency(num1, num2){
let strNum1 = num1.toString();
let strNum2 = num2.toString();
if(strNum1.length !== strNum2.length) return false;
let countNum1 = {};
let countNum2 = {};
for(let i = 0; i < strNum1.length; i++){
countNum1[strNum1[i]] = (countNum1[strNum1[i]] || 0) + 1
}
for(let j = 0; j < strNum1.length; j++){
countNum2[strNum2[j]] = (countNum2[strNum2[j]] || 0) + 1
}
for(let key in countNum1){
if(countNum1[key] !== countNum2[key]) return false;
}
return true;
}
4. 느낀점
1. 문자열은 .split("")을 쓰지 않아도 반복문을 쓸 수 있는데 사용해서 코드를 낭비했다. ( 2 ~ 3 )
2. 변수명을 _obj, _arr 붙이는 습관을 버리자
- num1_obj => strNum1
- num1_arr => countNum1
3. or 연산자를 이용해서 코드를 더 줄일수 있었다.
num2_obj[num2_arr[i]] === 1 ? num2_obj[num2_arr[i]] += 1 : num2_obj[num2_arr[i]] = 1;
--------------------------------
countNum1[strNum[i]] = (countNUm[strNum[i] || 0]) + 1;
4. 객체를 돌때는 for in 반복문을 사용하자.
for(let i in num_obj){
if(num1_obj[i] !== num2_obj[i]){
return false;
}
}
--------------------------------------------
for(let key in countNum1){
if(countNum[key] ! countNum2[key]) return false;
}
'Algorithm > udemy JavaScript 알고리즘 & 자료구조 마스터클래스' 카테고리의 다른 글
[Algorithm] maxSubarraySum 중복 있는지 확인하기 6-7 (0) | 2025.02.13 |
---|---|
[Algorithm] areThereDuplicates 중복 있는지 확인하기 6-4 (0) | 2025.01.20 |