입력받은 문자열(word)에서 가장 많이 반복되는 문자(letter)를 출력한다.
// 문자와 갯수를 저장할 객체를 생성한다.
// 문자열의 모든 공백을 제거한다.
// 빈 문자열일 경우 ''를 반환한다.
// 문자열을 반복하면서
// 문자가 객체에 없으면
// 문자를 키로, 값은 문자의 횟수, 초기값으로 0을 할당한다.
// 문자를 키로 갖는 값을 카운트 +1 한다.
// 객체에 가장 많이 사용한 문자열을 담는다.
// 문자의 카운트-업한 값을 가장 많이 사용한 문자열의 횟수와 비교한다.
// 문자의 횟수가 더 크면 가장 많이 사용한 문자열에 문자를.
// 가장 많이 사용한 문자열 횟수에 문자의 값을 넣는다.
// 가장 많이 사용된 문자를 반환한다.
function mostFrequentCharacter(word) {
let obj = {};
let str = word.replace(/\s+/g, '')
if (str === '') {
return ''
}
for (let value of str) {
if (obj[value] === undefined) {
obj[value] = 0;
}
obj[value]++;
if (obj['preq'] === undefined ) {
obj['preq'] = value
} else if (obj[value] > obj[obj['preq']]) {
obj['preq'] = value
}
}
return obj['preq'];
}
let result = mostFrequentCharacter('b a - na n -a - ')
word
를 for
문 들어가기 전에 공백제거를 시도했다. replaceAll
는 브라우저에서 콘솔에서는 작동했지만 코플릿이나 visualize code에서는 작동하지 않았다. ‘word.replaceAll is not function’
라는 typeError
가 날 때가 있었다. for
문 continue
를 사용해 공백을 제외하기로.‘preq’
키에 가장 많이 사용된 letter를 담았는데, obj[obj['preq']]
“객체 중 ‘preq’
의 값을 키로 가지고 있는 값”과… 이런식으로 풀이가 되는 것이 복잡하다. obj['preq']
의 초기값을 for
문 안에 설정하는 것이 불필요하다.function mostFrequentCharacter(word) {
let obj = {}
let mostFrequentLetter = ''
let mostFrequentCount = 0
for (let letter of word) {
if (letter === ' ') {
continue
}
if (obj[letter] === undefined) {
obj[letter] = 0
}
obj[letter]++
if (obj[letter] > mostFrequentCount) {
mostFrequentLetter = letter
mostFrequentCount = obj[letter]
}
}
return mostFrequentLetter
}
let result = mostFrequentCharacter('b a - na n -a - ')
debugger;
의 과정을 시각적으로 보여주는 사이트. 변수가 선언되고 할당되는 과정을 step by step으로 확인할 수 있다. javascript ES6로 확인이 가능하다. 링크
임베딩하면 미리보기에서는 잘 보이는데 게시하면 안나오는 듯
주제에 벗어나서 포스팅이 너무 길어지는 것 같아 따로 분리했다. 링크
continue
문은 현재 반복문에서 실행을 종료하고 반복문의 처음으로 돌아가여 반복문의 다음 코드를 실행한다. break
와 차이는 break
는 반복문for
, while
을 완전히 빠져나오는 반면, continue
는 해당 루프를 빠져나와 다음 루프를 시작한다.
while
문일 경우 해당 루프에서 while
조건부로 점프한다.for
문일 경우 업데이트 표현식(증감식)으로 점프한다.재미있는 건 continue
뒤에 label
이름이 붙을 수 있고, 이 경우 label
로 점프한다.