입력받은 문자열(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로 점프한다.