본문 바로가기
자바(Java)

문자열의 각 문자 빈도를 세는 Java 프로그램 쉽게 이해하기

by 코딩하는 욤욤이 2024. 11. 23.
반응형

아래는 문자열의 각 문자의 빈도를 세는 Java 프로그램과 함께 쉽게 이해할 수 있도록 자세히 설명한 내용입니다.


프로그램의 목적

이 프로그램은 문자열에서 각 문자가 몇 번 나타나는지를 계산합니다. 예를 들어, 문자열이 "hello"라면:

  • h는 1번,
  • e는 1번,
  • l은 2번,
  • o는 1번 나타납니다.

프로그램 코드

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class CharacterFrequency {
    public static void main(String[] args) {
        // 1. 사용자로부터 문자열 입력받기
        Scanner scanner = new Scanner(System.in);
        System.out.print("문자열을 입력하세요: ");
        String input = scanner.nextLine();

        // 2. 빈도수를 저장할 Map 생성
        Map<Character, Integer> frequencyMap = new HashMap<>();

        // 3. 문자열의 각 문자 순회
        for (char c : input.toCharArray()) {
            // Map에 문자가 이미 있다면 값 증가, 없다면 초기값 1로 설정
            frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1);
        }

        // 4. 결과 출력
        System.out.println("문자의 빈도수:");
        for (Map.Entry<Character, Integer> entry : frequencyMap.entrySet()) {
            System.out.println("'" + entry.getKey() + "' : " + entry.getValue() + "번");
        }
    }
}

단계별 설명

1. 사용자 입력받기

Scanner scanner = new Scanner(System.in);
System.out.print("문자열을 입력하세요: ");
String input = scanner.nextLine();
  • Scanner 클래스를 사용해 사용자가 문자열을 입력하도록 합니다.
  • scanner.nextLine()을 통해 사용자가 입력한 문자열을 변수 input에 저장합니다.

2. 문자의 빈도수를 저장할 공간 만들기

Map<Character, Integer> frequencyMap = new HashMap<>();
  • Map은 키-값 쌍을 저장할 수 있는 데이터 구조입니다.
  • 여기서 문자(character)는 키, **문자가 나타난 횟수(정수)**는 값으로 저장됩니다.
  • HashMap은 키-값 쌍을 저장하고 빠르게 검색할 수 있는 자료구조입니다.

3. 문자열을 하나씩 순회하기

for (char c : input.toCharArray()) {
    frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1);
}
  • input.toCharArray()는 문자열을 문자 배열로 변환합니다. 예: "hello" → ['h', 'e', 'l', 'l', 'o']
  • for문은 이 배열의 각 문자를 하나씩 가져옵니다.
  • frequencyMap.getOrDefault(c, 0)는 c가 이미 Map에 있으면 그 값을 가져오고, 없으면 기본값 0을 가져옵니다.
  • + 1을 더해 문자의 개수를 증가시키고, 그 결과를 다시 Map에 저장합니다.

4. 결과 출력

for (Map.Entry<Character, Integer> entry : frequencyMap.entrySet()) {
    System.out.println("'" + entry.getKey() + "' : " + entry.getValue() + "번");
}
  • frequencyMap.entrySet()은 Map의 모든 키와 값을 가져옵니다.
  • 각 키(문자)와 값(빈도수)을 순서대로 출력합니다.

예제 실행

입력

 
문자열을 입력하세요: hello

출력

문자의 빈도수:
'h' : 1번
'e' : 1번
'l' : 2번
'o' : 1번
 

추가 팁

  1. Map의 역할 이해하기
    • Map은 데이터를 정리된 형태로 저장합니다. 여기서는 문자를 키로 사용하고, 해당 문자의 빈도를 값으로 저장합니다.
  2. getOrDefault 이해하기
    • getOrDefault(key, defaultValue)는 key가 존재하면 값을 반환하고, 없으면 기본값 defaultValue를 반환합니다. 이 방법으로 코드를 간결하게 작성할 수 있습니다.
  3. 배열 변환
    • toCharArray()는 문자열을 문자로 쪼개는 데 사용됩니다. 이 방법으로 문자열의 각 문자를 처리할 수 있습니다.
  4. 출력 형식 커스터마이징
    • 출력 부분에서 필요에 따라 "빈도수" 대신 "횟수" 등 다른 표현을 사용할 수 있습니다.

이 프로그램은 입력한 문자열에서 문자의 빈도를 분석하고 결과를 명확하게 출력하는 좋은 기초 연습 예제입니다.

반응형