이 글에서는 문자열(String) 안에 특정 문자가 몇 번 등장하는지 빈도수를 계산하는 방법을 알아봅니다. 문자열이란 하나 이상의 문자로 구성되어 큰따옴표(" ")로 감싸진 자료형을 의미합니다.
문제 정의
먼저 예시를 통해 문제를 살펴보겠습니다.
입력값:
입력 문자열: Java Programming is fun
찾을 문자: a
기대 출력값:
a의 빈도수는 3입니다.
"Java Programming is fun"이라는 문자열에는 소문자 'a'가 총 3번 등장하므로 결과값은 3이 됩니다.
알고리즘
해결 과정은 다음과 같습니다.
Step 1 - 시작
Step 2 - 문자열(input_string), 문자(input_character), 카운터(counter) 변수를 선언한다.
Step 3 - 각 변수에 값을 할당한다.
Step 4 - for 반복문으로 문자열을 순회하며 각 문자와 찾으려는 문자를 비교한다. 일치할 경우 카운터 값을 증가시킨다.
Step 5 - 결과를 출력한다.
Step 6 - 종료
방법 1: main 함수에서 직접 처리
첫 번째 방법은 모든 연산을 main 함수 안에서 한 번에 수행하는 방식입니다.
public class Demo {
public static void main(String[] args) {
String input_string = "Java Programming is fun";
System.out.println("The string is defined as: " +input_string);
char input_character = 'a';
System.out.println("The character is defined as: " +input_character);
int counter = 0;
for(int i = 0; i < input_string.length(); i++) {
if(input_character == input_string.charAt(i)) {
++counter;
}
}
System.out.println("The frequency of " + input_character + " is " + counter );
}
}출력 결과
The string is defined as: Java Programming is fun
The character is defined as: a
The frequency of a is 3
방법 2: 객체 지향 방식으로 함수 분리
두 번째 방법은 빈도수 계산 로직을 별도의 함수로 분리하여 객체 지향 프로그래밍(OOP) 원칙에 맞게 코드를 구성한 것입니다. 이렇게 하면 코드의 재사용성과 유지보수성이 향상됩니다.
public class Demo {
public static int get_count(String input_string,char input_character) {
int counter = 0;
for (int i = 0; i < input_string.length(); i++) {
if (input_character == input_string.charAt(i)) {
++counter;
}
}
return counter;
}
public static void main(String[] args) {
String input_string = "Java Programming is fun";
System.out.println("The string is defined as: " +input_string);
char input_character = 'a';
System.out.println("The character is defined as: " +input_character);
int counter = get_count(input_string, input_character);
System.out.println("The frequency of " + input_character + " is " + counter );
}
}출력 결과
The string is defined as: Java Programming is fun
The character is defined as: a
The frequency of a is 3
코드 핵심 포인트
- charAt() 메서드: 문자열에서 특정 인덱스 위치의 문자를 반환합니다.
- length() 메서드: 문자열의 전체 길이를 반환하여 반복 범위를 결정합니다.
- 시간 복잡도: 두 방법 모두 문자열을 한 번만 순회하므로 O(n)의 시간 복잡도를 가집니다.
두 방법 모두 동일한 결과를 출력하지만, 규모가 큰 프로젝트에서는 로직을 함수로 분리하는 두 번째 방식이 더 바람직합니다.