✅ 문제

입력된 문장에 포함된 알파벳의 빈도를 대소문자 구별없이 구하는 프로그램을 작성하시오.
✅ 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("===== 알파벳 빈도수 구하기 =====");
System.out.println("입력 >> ");
Scanner sc = new Scanner(System.in);
int[] result = new int[26];
String inPut = sc.nextLine().replaceAll(" ", "");
System.out.println(inPut);
String outPut = inPut.toLowerCase();
for (int i = 0; i < inPut.length(); i++) {
result[outPut.charAt(i) - 97]++;
}
for (int i = 0; i < 26; i++) {
System.out.println((char) (i + 97) + " : " + result[i]);
}
}
}
✅ 추론 과정
주의할 점
1. CharAt() 메서드 쓰기 위해서 입력된 문장에 공백이 포함되어 있을 수 있으니 공백을 없애줘야 함
=> 즉, " "을 ""로 치환해줘야 함.
2. 문제에서 대소문자 구별없이 알파벳 빈도수를 구하라고 했으므로 모두 소문자로 치환하여 준다.
3. 아스키코드를 활용해서 해당 소문자의 알파벳 순서를 인덱스로 사용해서 등장 횟수를 세어 준다.
Scanner를 사용하여 사용자로부터 문자열을 입력받는다.
길이가 26인 정수 배열 result를 생성한다. 이 배열은 각 알파벳이 나타난 횟수를 저장해준다.
즉, 인덱스 0번부터 a의 빈도수, 26번은 z의 빈도수를 담아줄 것이다.
사용자로부터 입력받은 문자열에서 공백을 제거한다.
replaceAll(" ", "") 메서드를 사용하면 문장 안에 들어있는 공백 " "을 ""로 치환해 준다.
그래서 모든 알파벳이 띄어쓰기 없이 붙어있게 된다.
toLowerCase()메서드를 사용해서 모든 문자열을 소문자로 변환한다.
이는 대소문자를 구분하지 않고 알파벳을 카운트하기 위해서이다.
문자열의 길이만큼 반복문을 돌려준다.
for문 안에서 CharAt()메서드를 통해 입력된 문자 하나 하나가 어떤 알파벳인지 확인하고,
각 문자가 등장한 횟수를 result 배열에 저장한다.
배열 인덱스에 접근해서 알파벳 'a'부터 'z'까지 반복하면서 각 알파벳과 그에 해당하는 등장 횟수를 출력해 준다.
위의 코드에서 outPut.charAt(i) - 97을 하는 이유는 각 문자를 소문자로 변환한 후, 'a'를 기준으로 문자의 위치를 인덱스로 사용하여 해당 알파벳이 등장한 횟수를 세기 위해서이다. 영어 알파벳은 소문자 'a'부터 시작하여 연속적으로 아스키 코드 값이 할당되어 있는데, 소문자 'a'의 아스키 코드 값은 97이고, 그 다음 알파벳들은 각각 1씩 증가하는 값이다.
따라서 각 문자의 아스키 코드 값에서 'a'의 아스키 코드 값을 빼면 해당 문자가 알파벳 'a'부터 몇 번째 위치에 있는지를 알아낼 수 있다. 이렇게 하면 해당 문자의 알파벳 순서를 인덱스로 사용해서 등장 횟수를 세는 작업이 가능해진다. 그래서 outPut.charAt(i) - 97은 문자열에서 소문자 'a'부터 시작하여 각 문자가 몇 번째 알파벳인지를 나타내는 인덱스 값을 반환한다.
'Algorithm > JavaFestival' 카테고리의 다른 글
스마트 인재개발원 자바페스티벌 규칙 & 잘 하는 꿀팁 !! (1) | 2024.04.15 |
---|---|
[자바페스티벌] 31번 - N! 값 구하기 / 팩토리얼 (0) | 2024.03.29 |
[자바페스티벌] 29번 - 두 수의 합 맞추기 / 기회는 5번! (0) | 2024.03.29 |
[자바페스티벌] 28번 - 문자열 형태의 2진수를 입력받아 10진수로 바꾸기 (0) | 2024.03.28 |
[자바페스티벌] 27번 - ox 여부 입력 받아 총점을 구하는 프로그램 만들기 (0) | 2024.03.28 |
✅ 문제

입력된 문장에 포함된 알파벳의 빈도를 대소문자 구별없이 구하는 프로그램을 작성하시오.
✅ 코드
import java.util.Scanner; public class Main { public static void main(String[] args) { System.out.println("===== 알파벳 빈도수 구하기 ====="); System.out.println("입력 >> "); Scanner sc = new Scanner(System.in); int[] result = new int[26]; String inPut = sc.nextLine().replaceAll(" ", ""); System.out.println(inPut); String outPut = inPut.toLowerCase(); for (int i = 0; i < inPut.length(); i++) { result[outPut.charAt(i) - 97]++; } for (int i = 0; i < 26; i++) { System.out.println((char) (i + 97) + " : " + result[i]); } } }
✅ 추론 과정
주의할 점
1. CharAt() 메서드 쓰기 위해서 입력된 문장에 공백이 포함되어 있을 수 있으니 공백을 없애줘야 함
=> 즉, " "을 ""로 치환해줘야 함.
2. 문제에서 대소문자 구별없이 알파벳 빈도수를 구하라고 했으므로 모두 소문자로 치환하여 준다.
3. 아스키코드를 활용해서 해당 소문자의 알파벳 순서를 인덱스로 사용해서 등장 횟수를 세어 준다.
Scanner를 사용하여 사용자로부터 문자열을 입력받는다.
길이가 26인 정수 배열 result를 생성한다. 이 배열은 각 알파벳이 나타난 횟수를 저장해준다.
즉, 인덱스 0번부터 a의 빈도수, 26번은 z의 빈도수를 담아줄 것이다.
사용자로부터 입력받은 문자열에서 공백을 제거한다.
replaceAll(" ", "") 메서드를 사용하면 문장 안에 들어있는 공백 " "을 ""로 치환해 준다.
그래서 모든 알파벳이 띄어쓰기 없이 붙어있게 된다.
toLowerCase()메서드를 사용해서 모든 문자열을 소문자로 변환한다.
이는 대소문자를 구분하지 않고 알파벳을 카운트하기 위해서이다.
문자열의 길이만큼 반복문을 돌려준다.
for문 안에서 CharAt()메서드를 통해 입력된 문자 하나 하나가 어떤 알파벳인지 확인하고,
각 문자가 등장한 횟수를 result 배열에 저장한다.
배열 인덱스에 접근해서 알파벳 'a'부터 'z'까지 반복하면서 각 알파벳과 그에 해당하는 등장 횟수를 출력해 준다.
위의 코드에서 outPut.charAt(i) - 97을 하는 이유는 각 문자를 소문자로 변환한 후, 'a'를 기준으로 문자의 위치를 인덱스로 사용하여 해당 알파벳이 등장한 횟수를 세기 위해서이다. 영어 알파벳은 소문자 'a'부터 시작하여 연속적으로 아스키 코드 값이 할당되어 있는데, 소문자 'a'의 아스키 코드 값은 97이고, 그 다음 알파벳들은 각각 1씩 증가하는 값이다.
따라서 각 문자의 아스키 코드 값에서 'a'의 아스키 코드 값을 빼면 해당 문자가 알파벳 'a'부터 몇 번째 위치에 있는지를 알아낼 수 있다. 이렇게 하면 해당 문자의 알파벳 순서를 인덱스로 사용해서 등장 횟수를 세는 작업이 가능해진다. 그래서 outPut.charAt(i) - 97은 문자열에서 소문자 'a'부터 시작하여 각 문자가 몇 번째 알파벳인지를 나타내는 인덱스 값을 반환한다.
'Algorithm > JavaFestival' 카테고리의 다른 글
스마트 인재개발원 자바페스티벌 규칙 & 잘 하는 꿀팁 !! (1) | 2024.04.15 |
---|---|
[자바페스티벌] 31번 - N! 값 구하기 / 팩토리얼 (0) | 2024.03.29 |
[자바페스티벌] 29번 - 두 수의 합 맞추기 / 기회는 5번! (0) | 2024.03.29 |
[자바페스티벌] 28번 - 문자열 형태의 2진수를 입력받아 10진수로 바꾸기 (0) | 2024.03.28 |
[자바페스티벌] 27번 - ox 여부 입력 받아 총점을 구하는 프로그램 만들기 (0) | 2024.03.28 |