1. countStr
- 문자열을 입력받아, 각 문자열의 요소를 키로, 그리고 문자열에서 반복되어 나온 횟수를 값으로 가지는 객체를 리턴.
function countStr(str) {
let result = {}; // 빈 객체를 하나 만들어서 계산될 키와 값을 넣는다.
for(let i = 0; i < str.length; i++) { // 반복문으로 입력받은 str 을 전부 돈다.
if(result[str[i]] === undefined) { // 만약, str 의 요소가 result의 키로 없다면,
result[str[i]] = 1; // 그것을 키로 넣고 값은 한번 반복되었으니 일단 1로 한다.
} else {
result[str[i]]++ // 요소가 반복되어 나오면 값을 올린다.
}
}
return result; // 마지막으로 계산된 키와 값을 리턴시킨다.
}
2. objStr:count
- 위의 문제와 마찬가지로, str을 입력받아서, 가장 많이 입력된 문자 하나를 리턴
function objStrcount(str) {
let result = { multStr: '', count: 0 } // 새로운 객체를 선언하여, 가장 많이 입력된 문자와 그것을 count 할 키와 값을 할당한다.
for(let i = 0; i < str.length; i++) { // 입력 받은 문자열을 돌고 돌아
if(result[str[i]] === undefined) { // 입력 받은 문자열이 result 에 키로 없다면,
result[str[i]] = 0; // 키로 문자를 넣고, 값은 0으로 한다.
}
if(str[i] === ' ') { // 입력받은 문자에 띄어쓰기가 있을경우 무시한다.
continue;
}
result[str[i]]++ // 입력 받은 문자열이 result 에 키로 있다면 값을 하나 늘려준다.
if(result.count < result[str[i]]) { // count 와 입력받은 문자열의 값을 비교한다. 이때, count 보다 더 많이 반복 되었다면,
result.multStr = str[i] // 가장 많이 나온 문자로 바꿔주고
result.count = result[str[i]] // count 도 그 문자열의 반복된 횟수만큼으로 바꿔준다.
} // 이는 반복문으로, 계속해서 입력받은 문자열 들을 돌게 되고, 그 안에서 또 더 많이 반복된 문자열이 있다면 다시 할당 될 것이다.
}
return result.multStr; // 마지막으로 가장 많이 나온 문자열 하나를 리턴.
}
조금 당황할 수 있지만, 그렇게 어렵지 않게 풀렸다.
다른 사람들은 모두 배열로 바꿔서 풀었다고 한다. 모두 한 배열에 넣고 배열 안의
문자를 count 하면 가능은 할 것이다. 하지만 매우매우 복잡하고 효율이 떨어질 것이다.
객체가 배열보다 조금 더 복잡하지만, 조금 더 연습하면 완벽히 다룰 수 있을 것이다.
'Coding > Today I Learned' 카테고리의 다른 글
2021.07.01(Thu.) <클로저를 더 살펴보자 + 덤으로 스코프도> (0) | 2021.07.01 |
---|---|
2021.06.30(Wed.) <Flex 와 단위> (0) | 2021.06.30 |
2021.06.28(Mon.) (0) | 2021.06.28 |
2021.06.27(Sun.) <고차 함수 안에서의 데이터 가공> (0) | 2021.06.27 |
2021.06.26(Sat.) <이중 고차함수(?)> (0) | 2021.06.27 |