1> 첫째로 문제 해결을 위한 계획을 수립
2> 다음은 일반적인 문제 해결 패턴을 파악
charCount("aaa") // {a:4, b:0, c:0}
charCount("hello") //{ h: 1, e: 1, l: 2, o: 1 }
charCount("Your Pin number is 1234!")
/**
{
'1': 1,
'2': 1,
'3': 1,
'4': 1,
Y: 1,
o: 1,
u: 2,
r: 2,
P: 1,
i: 2,
n: 2,
m: 1,
b: 1,
e: 1,
s: 1
}**/
function charCount(str){
// 문제 세분화하기
// 1.마지막 반환할 객체 만들어주고
/*
2.문자열에 루프 적용
- for each 문자열
if 문자가 숫자/문자이며 객체에 키에 있으면 카운트 더해주고
if 문자가 숫자/문자이며 객체의 키에 없으면 키에 추가해주고 값 1로 설정
if 문자 아무것도 없다면(공백, 마침표 등) 아무것도하지 않기
*/
// 3.최종 객체 리턴하기
}
function charCount(str){
// 문제 세분화하기
// 1.마지막 반환할 객체 만들어주고
let result = {}
/*
2.문자열에 루프 적용
// if 문자 아무것도 없다면(공백, 마침표 등) 아무것도하지 않기
*/
for(let idx=0; idx<str.length; idx++){
let char=str[idx].toLowerCase()
if(result[char]>0){
//if 문자가 숫자/문자이며 객체의 키에 없으면 키에 추가해주고 값 1로 설정
result[char]++
} else {
// if 문자가 숫자/문자이며 객체에 키에 있으면 카운트 더해주고
result[char] =1
}
}
return result
}
// charCount("aaa") // {a:4, b:0, c:0}
charCount("hello")
charCount("Your Pin number is 1234!")
리팩토링 질문들
- 결과를 확인할 수 있는지
- 다르게 결과를 이끌어 낼 수 있을지
- 한누에 보고 이해가능한지
- 다른 문제에 대해서도 이러한 방법과 결과를 사용할 수 있는지
- 다른 리팩터링 방식에 대해 생각해보았는지
- 다른 사람들은 어떻게 문제를 해결했는지
function charCount(str){
let result = {}
// 1. for of로 개선
// for(let idx=0; idx<str.length; idx++){
// let char=str[idx].toLowerCase();
for(let char of str){
// 4. 문자나 숫자인 경우만 소문자로 바꾸도록 위치 조정하기
// let char = char.toLowerCase();
// if(/[a-z0-9]/.test(char)){
// 3. 정규표현식을 다른 방식으로 대체해보기 - ex) charAt
if(isAlphaNumeric(char)){
let char = char.toLowerCase();
result[char] =++result[char] || 1
// 2. if else문 truthy로 단순화하기
/*if(result[char]>0){
result[char]++;
} else {
result[char] = 1
}
*/
}
}
return result
}
function isAlphaNumeric(char){
let code = char.charCodeAt(0)
if(
!(code>47 && code < 58) &&
!(code>64 && code < 91) &
!(code>96 && code < 123)
){
return false
}
return true
}
function charCount(str){
// 문제 세분화하기
// 1.마지막 반환할 객체 만들어주고
let result = {}
/*
2.문자열에 루프 적용
// if 문자 아무것도 없다면(공백, 마침표 등) 아무것도하지 않기
*/
for(let idx=0; idx<str.length; idx++){
let char=str[idx].toLowerCase()
if(result[char]>0){
//if 문자가 숫자/문자이며 객체의 키에 없으면 키에 추가해주고 값 1로 설정
result[char]++
} else {
// if 문자가 숫자/문자이며 객체에 키에 있으면 카운트 더해주고
result[char] =1
}
}
return result
}
// charCount("aaa") // {a:4, b:0, c:0}
charCount("hello")
charCount("Your Pin number is 1234!")
```js
function charCount(str){
// 문제 세분화하기
// 1.마지막 반환할 객체 만들어주고
let result = {}
/*
2.문자열에 루프 적용
- for each 문자열
if 문자가 숫자/문자이며 객체에 키에 있으면 카운트 더해주고
if 문자가 숫자/문자이며 객체의 키에 없으면 키에 추가해주고 값 1로 설정
if 문자 아무것도 없다면(공백, 마침표 등) 아무것도하지 않기
*/
const specialChars =
/[`!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?~]/;
for(let char of str.toLowerCase().replace(/ /g,'')){
if(
char
&&
!specialChars.test(char)
&&
!result.hasOwnProperty(char)
){
result[char]=+1
} else if (
char
&&
!specialChars.test(char)
&&
result.hasOwnProperty(char)
){
result[char]++
}
}
// 3.최종 객체 리턴하기
return result
}