import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main_05 {
public static void main(String[] args) throws IOException {
//문제
//1.알파벳 대소문자로 된 단어가 주어진다
//2.이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아낸다
//3.가장 많이 사용된 알파벳을 대문자로 출력한다
//풀이
//1. 전부 대문자로 바꾼다
//2. 각 알파벳의 빈도수를 구한다
//3. 가장 많이 나타나는 알파벳을 찾는다
//4. 이 값을 가진 알파벳의 개수를 구한다.
//5. 가장 많이 나타나는 알파벳이 한 개일 경우와, 그렇지 않을 경우를 고려한다.
//설명
//1. uppercase를 이용하여 전부 대문자로 바꾼다
//2. 배열을 순회하며 소문자일 경우 result의 인덱스 값을 증가시킨다.
//3. max 변수에 최댓값을 할당하고 이 값을 개진 알파벳의 개수를 count 변수에 저장한다.
//4. 문자열로 변환하여 출력한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 입력 받기
String input = br.readLine().toUpperCase();
// 알파벳 빈도수를 저장할 배열
int[] frequency = new int[26]; // 알파벳 'A'부터 'Z'까지 인덱스 0부터 25까지 사용
// 입력된 문자열의 알파벳 빈도수 계산
for (int i = 0; i < input.length(); i++) {
char ch = input.charAt(i);
if ('A' <= ch && ch <= 'Z') { // 알파벳인 경우만 처리
frequency[ch - 'A']++;
}
}
// 가장 많이 사용된 알파벳 찾기
int maxFrequency = 0;
char answer = '?';
for (int i = 0; i < frequency.length; i++) {
if (frequency[i] > maxFrequency) {
maxFrequency = frequency[i];
answer = (char) ('A' + i); // 해당 인덱스에 해당하는 알파벳 구하기
} else if (frequency[i] == maxFrequency) {
answer = '?'; // 최댓값이 동률인 경우
}
}
// 결과 출력
System.out.println(answer);
br.close();
}
}
어차피 대문자로 출력할거기 때문에 대소문자를 대문자로 전부 바꿔버리고 시작하면 편하다.
그리고 bufferedreader을 쓸때 입출력에 왜 예외처리를 해주는지 궁금했는데
동작원리를 상세하게 설명한 블로그가 있으니
https://itbeginner2020.tistory.com/27 을 참고하면 좋다.
입출력 관련 클래스들은 자원을 사용하는데, (키보드와의 연결 같은 거라고 보면 됨)
자원이 없을 경우의 예외처리를 하기 위해 IOException(범용적인 예외) 를 해준다고 한다.
아니면 try catch로 감싸줘도 된다.
'자료구조 > 문제풀이' 카테고리의 다른 글
[백준 JAVA] 2609 최대공배수와 최대공약수 (0) | 2024.07.03 |
---|---|
[백준 JAVA] 3613 Java vs C++ (2) | 2024.07.03 |
[백준 JAVA] 9996 한국이 그리울 땐 서버에 접속하지 (1) | 2024.07.02 |
[백준 JAVA] 10798 세로읽기 (1) | 2024.07.01 |
[백준 JAVA] 9046번 복호화 (1) | 2024.07.01 |