입력받은 단어에서 가장 많이 사용된 알파벳을 구하는 문제이다.
먼저 대소문자를 구분하지 않으므로 입력받은 문자열을 toUpperCase() 함수를 이용해 대문자로 바꿔준다.
이후 각 알파벳이 얼마나 쓰였는지 확인할 배열 count[] 를 생성해주고 크기를 26(알파벳 수)로 잡는다.
그리고 for문을 이용해 각 charAt() 함수로 입력받은 문자열을 하나 하나 잘라서 count[a.charAt(i)-65] 를 증가시킨다.
여기서 a.charAt(i)-65 는 입력받은 알파벳을 아스키코드로 변환하여 65를 빼면 A의 경우 0, B의 경우 1 .. 이 나온다.
즉 ABCD를 입력받았다면
a.charAt(0) - 65 는 0
a.charAt(1) - 65 는 1
a.charAt(2) - 65 는 2
a.charAt(3) - 65 는 3
이 되는 것이다.
이처럼 count[ (알파벳 순서) ] 를 문자열이 끝날때 까지 반복시켜 증가시킨 후 이 중 최대값을 max 변수에 넣는다.
String a = sc.next();
a = a.toUpperCase();
int[] count = new int[26];
int max = 0;
for (int i = 0; i < a.length(); i++) {
count[a.charAt(i) - 65]++;
if (max < count[a.charAt(i) - 65]) {
max = count[a.charAt(i) - 65];
}
}
이후 다시 for문을 이용하여 max와 count[i](각 알파벳이 사용된 횟수)를 비교해본다.
max와 count[i]가 같을때마다 check를 1씩 증가시키고,
check가 1보다 크다면 결과를 저장할 res변수에 ? 를 저장하고 아니라면 (char)(i + 65) 를 저장한다.
(char)(i + 65)는 아까 알파벳 순서대로 저장하기 위해 65를 뺀 값을 다시 더해주어 아스키코드로 변환한 것이다.
char res = 0;
int check = 0;
for (int i = 0; i < count.length; i++) {
if (max == count[i]) {
check++;
if (check > 1) {
res = '?';
} else {
res = (char) (i + 65);
}
}
}
이후 res를 출력해주면 완성.
전체 코드를 보면 다음과 같다.
import java.util.Scanner;
public class Back1157 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a = sc.next();
a = a.toUpperCase();
int[] count = new int[26];
int max = 0;
char res = 0;
int check = 0;
for (int i = 0; i < a.length(); i++) {
count[a.charAt(i) - 65]++;
if (max < count[a.charAt(i) - 65]) {
max = count[a.charAt(i) - 65];
}
}
for (int i = 0; i < count.length; i++) {
if (max == count[i]) {
check++;
if (check > 1) {
res = '?';
} else {
res = (char) (i + 65);
}
}
}
System.out.println(res);
}
}
'Java > 백준알고리즘' 카테고리의 다른 글
[Java] 백준알고리즘 #2163 초콜릿 자르기 (0) | 2021.03.26 |
---|---|
[Java] 백준알고리즘 #1010 다리 놓기 (0) | 2021.03.26 |
[Java] 백준알고리즘 #10990 별 찍기 - 15 (0) | 2021.03.23 |
[Java] 백준알고리즘 #2675 문자열 반복 (0) | 2021.03.19 |
[Java] 백준알고리즘 #10809 알파벳 찾기 (0) | 2021.03.19 |