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
'자격증·공부 아카이브 > Java 기초' 카테고리의 다른 글
| Java 2차원 배열 완전정리: 세로·지그재그 채우기와 90도 회전 (0) | 2026.08.05 |
|---|---|
| Java 배열 집계와 랜덤: 최댓값·학점 빈도·중복 없는 로또 (0) | 2026.08.04 |
| Java 숫자 계산 예제: 거스름돈·반올림·구구단·세 자리 곱셈 (0) | 2026.08.02 |
| Java while문 실전: 목표 달성·덧셈 게임·종료 조건 (0) | 2026.08.02 |
| Java 반복문 누적 계산: 교대 합·수열·팩토리얼 풀이 (0) | 2026.08.01 |