개요
문자열 처리에서 자주 접하는 작업 중 하나는 각 문자가 몇 번 나타나는지 세는 것입니다. 이번 글에서는 HashMap을 활용해 문자열 내 각 문자의 발생 횟수를 효율적으로 계산하는 방법을 예제와 함께 살펴보겠습니다.
문자열 준비
다음과 같은 문자열이 있다고 가정해 보겠습니다.
String myStr = "thisisit";
HashMap으로 발생 횟수 계산하기
각 문자의 발생 횟수를 저장하기 위해 HashMap<Character, Integer>를 사용합니다. 문자열을 순회하면서 containsKey() 메서드로 해당 문자가 이미 맵에 존재하는지 확인하고, 존재하면 기존 값을 1 증가시키며, 존재하지 않으면 1로 초기화합니다. 이때 charAt() 메서드를 사용해 특정 인덱스의 문자를 가져옵니다.
HashMap <Character, Integer> hashMap = new HashMap<>();
for (int i = myStr.length() - 1; i >= 0; i--) {
if (hashMap.containsKey(myStr.charAt(i))) {
int count = hashMap.get(myStr.charAt(i));
hashMap.put(myStr.charAt(i), ++count);
} else {
hashMap.put(myStr.charAt(i),1);
}
}
위 코드는 문자열의 끝에서 시작 부분까지 역순으로 순회합니다. HashMap은 요소의 순서를 보장하지 않으므로 순회 방향은 결과에 영향을 주지 않습니다.
전체 예제 코드
다음은 각 문자의 발생 횟수를 계산하는 완성된 프로그램입니다.
import java.util.HashMap;
public class Demo {
public static void main(String[] args) {
String myStr = "thisisit";
System.out.println("String ="+myStr);
HashMap <Character, Integer> hashMap = new HashMap<>();
for (int i = myStr.length() - 1; i >= 0; i--) {
if (hashMap.containsKey(myStr.charAt(i))) {
int count = hashMap.get(myStr.charAt(i));
hashMap.put(myStr.charAt(i), ++count);
} else {
hashMap.put(myStr.charAt(i),1);
}
}
System.out.println("Counting occurrences of each character = "+hashMap);
}
}
실행 결과
String =thisisit
Counting occurrences of each character = {s=2, t=2, h=1, i=3}
핵심 메서드 정리
- containsKey(): 맵에 해당 키(문자)가 이미 존재하는지 확인합니다.
- charAt(): 문자열에서 지정된 인덱스 위치의 문자를 반환합니다.
- get() / put(): 기존 개수를 가져와 1 증가시킨 뒤 다시 저장합니다.
이 방식은 문자열을 한 번만 순회하면 되므로 시간 복잡도가 O(n)으로, 길이가 긴 문자열에서도 매우 효율적으로 동작합니다.