Study JS for me/Algorithm
algorithm 연습9
be well
2019. 5. 5. 18:54
문제. input 으로 주어진 문자열의 각 단어들을 키로 , 단어의 사용 횟수를 값으로 가친 객체로 리턴하고
빈 문자열이 오면 빈 객체를 리턴.
Ex) input : 'ask a bunch get a bunch' => output : {ask: 1, a: 2, bunch: 2, get: 1}
해결방안.
1-1. input 문자열을 분리해서 빈 객체의 key 값으로 정함.
1-2. key 의 값은 1.
1-3. 이미 key 가 존재 할 경우 값 ++
2-1. reduce 메소드의 초기값으로 빈 객체를 줌.
2-2. 객체=acc 안에 curr이 있다면 값++
2-3. 없다면 값을 1 로 지정.
첫 번째 솔루션.
빈 객체를 생성. 빈 문자열이 들어오면 빈 객체를 리턴하고 문자열을 공백 기준으로 나눔.
unction countWords(input) {
let result = {};
if(input.length===0){
return {};
}
let arr = input.split(' ');
각 요소를 키로 지정한 채 조건문 생성 , 없다면 값을 1 로 주고 , 이미 존재한다면 1 씩 추가로 더 해줌.
for(let i = 0; i < arr.length; i++){
if(result[arr[i]]===undefined){
result[arr[i]] = 1 ;
}
else if(result[arr[i]]){
result[arr[i]] +=1
}
}
return result;
}
결과확인
두 번째 솔루션.
reduce 메소드의 초기값으로 빈 객체를 주고 객체(acc) 안에 curr이 키 값으로 있다면 값++ , 없다면 값을 1 로 지정.
function countWords(input) {
// your code here
if(input === ''){
return {};
}
let wordsArr = input.split(' ');
console.log(wordsArr);
return wordsArr.reduce(function(acc, curr){
if(curr in acc){
acc[curr]++;
}
else {
acc[curr] = 1;
}
return acc;
}, {});
}
결과확인