Max Char

Directions

주어진 문자열에서 가장 많이 사용된 단어를 반환하기.

Examples

maxChar('abcccccccd') === 'c'
maxChar('apple 1231111') === '1'

1.

일단 우리는 주어진 문자열을 쪼개서 각 문자가 몇번 사용 되었는지 확인할 수 있어야 합니다. MaxChar_1MaxChar_2

const string = 'Hello World!'
const chars = {}

for (let char of string) {
  console.log(chars) // 하단 주석처리
  if (!chars[char]) {
    chars[char] = 1
  } else {
    chars[char]++
  }
}

// {}
// {H: 1}
// {H: 1, e: 1}
// {H: 1, e: 1, l: 1 }
// {H: 1, e: 1, l: 2 }
// {H: 1, e: 1, l: 2, o: 1 }
// ...
// {H: 1, e: 1, l: 3, o: 2, " ": 1, W: 1, r: 1, d: 1, !: 1}

위와같은 방법으로 문자열에서 각 문자가 얼마나 사용 되었는지 알아보았습니다. 이제는 가장 많이 사용된 문자를 반환할 차례입니다.

function maxChar(str) {
  const charMap = {}
  let max = 0
  let maxChar = ''

  for (let char of str) {
    if (charMap[char]) {
      charMap[char]++
    } else {
      charMap[char] = 1
    }
  }

  for (let char in charMap) {
    if (charMap[char] > max) {
      max = charMap[char]
      maxChar = char
    }
  }

  return maxChar
}

module.exports = maxChar

WARNING

만약 많이 사용된 문자가 중복으로 발생할 경우 가장 앞에 나온 글자가 반환되어 집니다.

예를들어 문자열이 "Heelloo"와 같은경우 'e'가 반환되어집니다

Test

const maxChar = require('./index')

test('maxChar function exists', () => {
  expect(typeof maxChar).toEqual('function')
})

test('Finds the most frequently used char', () => {
  expect(maxChar('a')).toEqual('a')
  expect(maxChar('abcdefghijklmnaaaaa')).toEqual('a')
})

test('Works with numbers in the string', () => {
  expect(maxChar('ab1c1d1e1f1g1')).toEqual('1')
})