본문 바로가기
자격증·공부 아카이브/Java 기초

Java 문자열 집계 문제: 알파벳 빈도·OX 점수·숫자 대시 개수

by 쑥쑥자라나라 2026. 8. 3.
728x90

Java 문자열 집계 문제는 문자를 하나씩 읽고, 그 문자가 의미하는 위치나 점수를 누적하는 문제다. A~Z 코드표, 숫자별 대시 개수, OX 연속 점수, 알파벳 빈도수를 배열 인덱스로 연결해 보자.

공통 흐름: 문자열 순회 → 현재 문자 해석 → 배열 또는 누적값 갱신 → 결과 출력.

문자 하나가 알파벳 빈도 칸과 OX 연속 점수로 변환되는 처리 흐름

1. A~Z는 char로 순회한다

for (char ch = 'A'; ch <= 'Z'; ch++) {
    System.out.printf("%d 0x%02X %c%n", (int) ch, (int) ch, ch);
}

원문 9처럼 별도의 문자 변수를 함께 증가시킬 필요가 없다. char 자체가 정수 코드값을 가지므로 A부터 Z까지 직접 반복할 수 있다.

2. 숫자별 대시 개수는 조회표로 만든다

static int countSegments(String number) {
    int[] segments = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
    int total = 0;

    for (int i = 0; i < number.length(); i++) {
        char ch = number.charAt(i);
        if (!Character.isDigit(ch)) {
            throw new IllegalArgumentException("숫자만 입력하세요.");
        }
        total += segments[ch - '0'];
    }
    return total;
}

원문 25의 긴 switch문은 숫자 0~9를 배열 인덱스로 바꾸면 짧아진다. ch - '0'은 문자 '7'을 정수 7로 바꾼다.

728x90

3. O가 연속될수록 점수를 늘린다

static int oxScore(String answers) {
    int streak = 0;
    int total = 0;

    for (char answer : answers.toUpperCase().toCharArray()) {
        if (answer == 'O') {
            streak++;
            total += streak;
        } else if (answer == 'X') {
            streak = 0;
        } else {
            throw new IllegalArgumentException("O와 X만 입력하세요.");
        }
    }
    return total;
}

OOOXOO는 1+2+3+0+1+2로 9점이다. X를 만났을 때 총점을 0으로 만들지 않고 연속 횟수만 0으로 초기화해야 한다.

4. 알파벳 빈도수는 26칸 배열로 센다

static int[] alphabetFrequency(String sentence) {
    int[] counts = new int[26];
    for (char ch : sentence.toLowerCase().toCharArray()) {
        if (ch >= 'a' && ch <= 'z') {
            counts[ch - 'a']++;
        }
    }
    return counts;
}

원문 30의 a~z switch 26개는 인덱스 계산 하나로 바꿀 수 있다. 문장 전체를 받으려면 next()가 아니라 nextLine()을 사용한다.

문제상태초기화 시점
대시 개수전체 합문자열 시작 전
OX 점수연속 횟수·전체 점수X에서 연속 횟수만 0
알파벳 빈도26칸 배열새 문장마다 새 배열

5. 실수하기 쉬운 부분

String과 char 비교를 섞는다

한 글자는 'A', 문자열은 "A"다. charAt() 결과는 작은따옴표 문자와 비교한다.

공백에서 입력이 잘린다

문장 빈도수는 nextLine()으로 읽는다. 앞서 숫자를 읽었다면 남은 줄바꿈을 한 번 소비한다.

잘못된 문자를 조용히 무시한다

문제 조건이 O/X만 허용한다면 예외로 알려 테스트 오류를 빨리 찾는다.

핵심 요약
  • char는 코드값과 배열 인덱스로 연결할 수 있다.
  • 긴 switch는 작은 조회 배열로 줄일 수 있다.
  • 연속 점수는 현재 연속 횟수와 전체 점수를 나눠 관리한다.
  • 알파벳 인덱스는 ch - 'a'다.
728x90