이 문제는 글자 하나하나 떼어서 세는건 저번 알고리즘 문제때 했던 charAt()로 하면 될 것 같은데 알파벳-알파벳의 개수 를 같이 저장시키는걸 어떻게 해야하나에서 고민을 했다. (배열의 자리가 해당 알파벳, 해당 자리의 값을 중복값으로 해결했다)
그리고 .length 로 할 때 빨간줄이 떠서 당황했는데 배열이 아니라 문자의 길이인 경우에는 .length() 를 써야했다.
마지막으로 char형을 쓸 일이 은근 많은 듯 해서 아스키코드를 첫글자정도는 외워둬야 한다는 생각이 들었다. A는 65 a는 97...
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int alphabet[] = new int[26]; //알파벳 저장할 배열
String str = in.next(); //문자 받기
str = str.toUpperCase(); //모두 대문자로 바꾸기
for(int i=0; i<str.length(); i++) {
alphabet[str.charAt(i)-'A']++;
//문자 하나씩 떼서 A 뺀 숫자 = 알파벳 순서 자리에 들어감(A=0, B=1번째 자리)
//만약 중복값이 있다면 alphabet[str.charAt(i)-'A']의 값이 늘어난다
}
int max = 0, result = 0;
//max = 문자 안에 들어간 해당 알파벳의 개수(중복이 가장 많은 알파벳의 개수로 바뀌게 됨) / result = 해당 알파벳
for(int i=0; i<alphabet.length; i++) {
if(max < alphabet[i]) {
max = alphabet[i]; //더 중복 많은 개수로 바뀜
result = i;
}
else if(max == alphabet[i]) { //가장 큰 수가 중복
result = -2; // ?의 아스키코드값이 63이라 A보다 2 작다
}
}
System.out.printf("%s" , Character.toString((char)(result+'A')));
//%s = 문자열이기 때문에 char형을 String으로 형변환해야 한다.
}
}
설명은 주석에...
'Study > 알고리즘' 카테고리의 다른 글
백준 1259번 - 팰린드롬수 JAVA (0) | 2022.08.02 |
---|---|
백준 1159번 - 농구 경기 JAVA (0) | 2022.07.30 |
백준 1145번 - 적어도 대부분의 배수 JAVA (0) | 2022.07.27 |
백준 1110번 - 더하기 사이클 JAVA (0) | 2022.07.27 |
백준 1075번 - 나누기 JAVA (0) | 2022.07.26 |