014 빈도수가 가장 높은 문자 찾기
HashMap을 쓰면 쉽다. 이 해법은 다음 세 단계를 거친다.
1. 주어진 문자열의 문자들을 순회하면서 현재 문자를 키로, 현재까지의 빈도수를 값으로 하는 키-값 쌍을 HashMap에 넣는다.
2. HashMap의 최댓값, 즉 가장 높은 빈도수를 계산한다(Collections.max() 등을 사용한다).
3. HashMap 내 항목 집합을 순회하며 가장 높은 빈도수의 문자를 찾는다.
위 유틸리티 메서드는 빈도수가 가장 높은 문자와 그 빈도수를 포함하는 Pair<Character, Integer>를 반환한다(이때 여백은 제외한다). Pair라는 클래스를 사용하지 않으려면 Map.Entry<K, V>를 사용한다.
public static Pair<Character, Integer> maxOccurenceCharacter(String str) {
Map<Character, Integer> counter = new HashMap<>();
char[] chStr = str.toCharArray();
for (int i = 0; i < chStr.length; i++) {
char currentCh = chStr[i];
if (!Character.isWhitespace(currentCh)) { // 여백은 제외
Integer noCh = counter.get(currentCh);
if (noCh == null) {
counter.put(currentCh, 1);
} else {
counter.put(currentCh, ++noCh);
}
}
}
int maxOccurrences = Collections.max(counter.values());
char maxCharacter = Character.MIN_VALUE;
for (Entry<Character, Integer> entry: counter.entrySet()) {
if (entry.getValue() == maxOccurrences) {
maxCharacter = entry.getKey();
}
}
return Pair.of(maxCharacter, maxOccurrences);
}