안녕하세요, 작가 J입니다. 이번에는 입력된 문장에 포함된 알파벳의 빈도를 대소문자 구별없이 구하는 프로그램을 작성해 보겠습니다. 이번 예제는 문자열 처리와 배열을 활용한 빈도수 계산을 배우는 데 도움이 됩니다.
[Java Festival 30] 알파벳 빈도수 구하기
입력된 문장에 포함된 알파벳의 빈도를
대소문자 구별없이 구하는 프로그램을 작성하시오.
코드 풀이 1: ASCII 숫자 접근에 따른 방식
import java.util.Scanner;
public class p45 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("==== 알파벳 빈도수 구하기 ====");
System.out.print("입력 >> ");
String str = sc.nextLine().trim().toLowerCase(); // 입력 문자열을 소문자로 변환
char[] ch = str.toCharArray(); // 문자열을 문자 배열로 변환
int[] array = new int[26]; // 알파벳 빈도수를 저장할 배열
for (int j = 0; j < ch.length; j++) {
for (int i = 97; i <= 122; i++) { // 'a'부터 'z'까지의 아스키 코드 범위
if (ch[j] == i) { // 현재 문자가 알파벳인지 확인
array[i - 97] += 1; // 해당 알파벳의 빈도수 증가
}
}
}
for (int i = 97, j = 0; i <= 122; i++, j++) { // 'a'부터 'z'까지 출력
System.out.println((char) (i) + " : " + array[j]);
}
sc.close(); // Scanner 객체 닫기
}
}
1. 입력 받기 및 소문자 변환
- String str = sc.nextLine().trim().toLowerCase();
- 입력된 문자열을 소문자로 변환합니다.
2. 문자 배열로 변환
- char[] ch = str.toCharArray();
- 문자열을 문자 배열로 변환합니다.
3. 알파벳 빈도수 계산
- int[] array = new int[26];
- 알파벳 빈도수를 저장할 배열을 선언합니다.
- for (int j = 0; j < ch.length; j++) { ... }
- 문자 배열을 순회하면서 각 문자가 알파벳인지 확인하고 빈도수를 증가시킵니다.
4. 결과 출력
- for (int i = 97, j = 0; i <= 122; i++, j++) { ... }
- 'a'부터 'z'까지의 알파벳 빈도수를 출력합니다.
코드 풀이 2: 'char' 형만 사용한 방식
import java.util.Scanner;
public class Ex30Alternative {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("==== 알파벳 빈도수 구하기 ====");
System.out.print("입력 >> ");
String str = sc.nextLine().trim().toLowerCase(); // 입력 문자열을 소문자로 변환
int[] frequency = new int[26]; // 알파벳 빈도수를 저장할 배열
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c >= 'a' && c <= 'z') { // 알파벳 범위 확인
frequency[c - 'a']++; // 해당 알파벳의 빈도수 증가
}
}
for (char c = 'a'; c <= 'z'; c++) { // 'a'부터 'z'까지 출력
System.out.println(c + " : " + frequency[c - 'a']);
}
sc.close(); // Scanner 객체 닫기
}
}
1. 입력 받기 및 소문자 변환
- String str = sc.nextLine().trim().toLowerCase();
- 입력된 문자열을 소문자로 변환합니다.
2. 알파벳 빈도수 계산
- int[] frequency = new int[26];
- 알파벳 빈도수를 저장할 배열을 선언합니다.
- for (int i = 0; i < str.length(); i++) { ... }
- 문자열을 순회하면서 각 문자가 알파벳인지 확인하고 빈도수를 증가시킵니다.
- if (c >= 'a' && c <= 'z') { ... }
- 현재 문자가 알파벳 범위에 있는지 확인합니다.
- frequency[c - 'a']++;
- 해당 알파벳의 빈도수를 증가시킵니다.
3. 결과 출력
- for (char c = 'a'; c <= 'z'; c++) { ... }
- 'a'부터 'z'까지의 알파벳 빈도수를 출력합니다.
마무리
이번 예제에서는 입력된 문장에 포함된 알파벳의 빈도를 대소문자 구별없이 구하는 두 가지 방식의 프로그램을 다뤄보았습니다. 첫 번째 방식은 기본적인 방식이며, 두 번째 방식은 char 형만을 사용한 방식입니다. 두 가지 방법 모두 이해하시는데 도움이 되길 바랍니다.
프로그래밍을 시작하는 모든 분께 이 예제가 도움이 되길 바랍니다. 앞으로도 다양한 유형의 문제를 통해 여러분의 학습을 도울 수 있도록 노력하겠습니다. 감사합니다!
'프로그래밍 기초 > Java Festival' 카테고리의 다른 글
[Java Festival] 31. 팩토리얼 계산하기 (0) | 2024.07.07 |
---|---|
[Java Festival] 29. 두 정수의 합 맞추기 게임 (0) | 2024.07.05 |
[Java Festival] 28. 2진수를 10진수로 변환하기 (0) | 2024.07.05 |
[Java Festival] Bonus06. 거듭제곱 계산하기 (0) | 2024.07.05 |
[Java Festival] 27. Java 시험 문제 채점하기 (0) | 2024.07.05 |