문제 풀기 앞서,
.toCharArray()
는 문자열을 문자 배열(char[]
)로 변환하는 메서드이다.
"HELLO"라는 문자열이 있다면:
char[] arr = "HELLO".toCharArray();
arr
에는 ['H', 'E', 'L', 'L', 'O']
가 저장됨링크: https://www.acmicpc.net/problem/1157
import java.util.Scanner;
public class Main{
public static void main (String [] args){
Scanner scan = new Scanner(System.in);
String str = scan.next();
scan.close(); // Scanner 닫기
int[] alphabet = new int[26]; // 알파뱃 개수 저장 배열
// 모든 문자를 대문자로 변환 후 개수 세기
str = str.toUpperCase();
for(char ch: str.toCharArray()){
alphabet[ch - 'A']++; // 'A'를 0번 인덱스에 맞추기 & 해당 알파뱃 개수 증가
}
// 최대값 및 최빈 문자 찾기
int maxCount = 0;
char maxChar = '?';
boolean duplicate = false;
for(int i=0; i<26; i++){
if(alphabet[i] > maxCount){
maxCount = alphabet[i];
maxChar = (char) (i+'A');
duplicate = false; // 새로운 최대값이 나오면 중복 초기화
}else if(alphabet[i] == maxCount){
duplicate = true; // 최대값이 여러 개면 중복 처리
}
}
System.out.print(duplicate ? "?": maxChar);
}
}
for(char ch: str.toCharArray()){ // 향상된 for문(Enhanced for-loop)
alphabet[ch - 'A']++;
}
str.toCharArray()
가 문자열을 문자 배열(char[]
)로 변환for
루프를 통해 배열의 각 문자를 하나씩 꺼내 ch
에 저장하면서 반복ch - 'A'
를 이용해 알파벳이 'A'부터 0번 인덱스에 저장되도록 함alphabet[ch - 'A']++
: alphabet 배열에서 해당 알파벳의 개수를 증가시킴maxChar = (char) (i + 'A');
i
는 0~25 범위의 숫자i
를 'A'에 더하면 해당 알파벳의 ASCII 코드 값이 나옴(char)
로 변환하면 해당 알파벳 문자가 됨예제:
int maxIndex = 4; // 'E'가 가장 많이 등장했다고 가정
char maxChar = (char) (maxIndex + 'A'); // 'E'로 변환됨
System.out.println(maxChar);