(알고리즘) Codewars : chracterFrequency
Description
Write a function that takes as its input a string and returns an array of
arrays as shown below sorted in descending order by frequency and then by
ascending order by character.
:: Example ::
characterFrequency('mississippi') ===
[
['i', 4],
['s', 4],
['p', 2],
['m', 1]
]
:: Example2 ::
characterFrequency('miaaiaaippi') ===
[
['a', 4],
['i', 4],
['p', 2],
['m', 1]
]
:: Example3 ::
characterFrequency('mmmaaaiiibbb') ===
[
['a', 3],
['b', 3],
['i', 3],
['m', 3]
]
var characterFrequency = function (string) {
};
문제풀이
문자열이 인풋으로 주어지면 중복되는 문자열의 개수를 나타내는 숫자를 문자와 함께 배열에 담아서 정렬한 다음 2차원 배열로 반환하는 문제
풀이
해쉬문제다. 그래서 처음 객체를 만들고, 배열로 접근하면 쉽게 문제를 해결할 수 있다. 객체를 2차원 배열로 정렬하기 위해 Object.entries(obj)
를 이용했다. (반대는 Object.assing({}, arr)
)
// 반복되지 않는 첫 번째 문자열 반환하기
// 해쉬
function solution(s) {
let answer;
let obj={};
for (let x of s) {
if (obj[x]) {
obj[x] += 1;
} else {
obj[x] = 1;
}
}
answer = Object.entries(obj).sort();
return answer.sort((a, b) => b[1] - a[1]);
}
const s = 'mississippi';
const n = 'miaaiaaippi';
const x = 'mmmaaaiiibbb';
console.log(solution(s));
console.log(solution(n));
console.log(solution(x));
다른 문제 풀이
export default function characterFrequency (string) {
let convertToObj = string
.split("")
.sort()
.reduce((all, one) => {
if (one in all) {
all[one]++
} else {
all[one] = 1;
}
return all
}, {});
let converToArray = [];
for(let key in convertToObj) {
converToArray.push([key, convertToObj[key]])
}
converToArray.sort((a, b) => {
return b[1] - a[1]
});
return converToArray;
};
정말 유연하게 잘 풀어낸 문제, reduce는 정말이지 복잡한 알고리즘 식을 깔끔하게 정리해준다. acc로 빈 객체를 선언하고, 그 안에서 one이라고 표현된 벨류를 가진 all 키 값에 if 문을 통해 벨류를 증감시키는 방식을 사용했다.
그리고 객체 안에서, sort를 하기 위해 빈 배열을 다시 선언하고, 키 값을 순회하며, key값에 맞는 벨류를 할당해주었다.
자바스크립트의 유연함은 이중 배열의 요소에 접근할때 빛이 나는데,
return b[1] - a[1]
이렇게 간결하게 코드를 정리할 수 있다.
Author And Source
이 문제에 관하여((알고리즘) Codewars : chracterFrequency), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yunsungyang-omc/codeWars-chracterFrequency저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)