더북(TheBook)

001 문자 개수 세기

 

문자열에서 문자 개수를 세려면 각 문자(#, $, % 같은 특수 문자 포함)를 하나씩 보며 나머지 문자들과 비교해야 한다. 비교하다 똑같은 문자를 찾으면 숫자 카운터를 1씩 증가시키며 현재 개수를 기록한다.

이 문제의 해법은 두 가지다.

첫 번째 해법은 문자열 내 문자를 순회하며 Map을 사용해 문자를 키로, 빈도수를 값으로 저장하는 방법이다. 현재 문자가 Map에 없으면 (character, 1)을 추가한다. 현재 문자가 Map에 있으면 (character, occurrences+1)처럼 빈도수를 1 증가시킨다. 코드로 살펴보자.

public Map<Character, Integer> countDuplicateCharacters(String str) {
  Map<Character, Integer> result = new HashMap<>();

  // for(char ch: str.toCharArray()) { ... }를 사용해도 된다
  for (int i = 0; i<str.length(); i++) {
    char ch = str.charAt(i);

    result.compute(ch, (k, v) -> (v == null) ? 1 : ++v);
  }

  return result;
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.