문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
예제 입력 1
Mississipi
예제 출력 1
?
예제 입력 2
zZa
예제 출력 2
Z
코드
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
str = str.toLowerCase();
int[] English = new int[26];
for(int i=0;i<str.length();i++){
English[str.charAt(i) - 'a'] += 1;
}
int max = 0;
char chr = '?';
for(int i=0;i<26;i++){
if(max<English[i]){
max = English[i];
chr = (char) (i+65);
}else if(max == English[i]){
chr = '?';
}
}
System.out.println(chr);
}
}
풀이
str = str.toLowerCase();
int[] English = new int[26];
입력받은 문자열을 모두 소문자로 변환한다.
알파벳 26개의 카운트 수를 저장할 정수형 배열 English를 선언한다.
for(int i=0;i<str.length();i++){
English[str.charAt(i) - 'a'] += 1;
}
입력받은 문자열의 각 문자에 접근하여 해당 알파벳의 위치에 +1을 하여 갯수를 센다.
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
int max = 0;
char chr = '?';
for(int i=0;i<26;i++){
if(max<English[i]){
max = English[i];
chr = (char) (i+65);
}else if(max == English[i]){
chr = '?';
}
}
최대값 저장을 위한 max 변수와 최대값에 해당하는 알파벳을 출력하기 위한 chr 변수를 선언한다.
for문을 통해 English 배열의 각 요소에 접근하여, 최대값을 max에 저장하고, 해당 알파벳을 char에 저장한다.
i+65를 하면 현재 인덱스의 번호와 일치하는 알파벳의 소문자형의 10진수 값을 얻을수 있다.
System.out.println(chr);
마지막으로 chr변수를 출력한다
결과
str = str.toLowerCase();
for(int i=0;i<str.length();i++){
English[str.charAt(i) - 'a'] += 1;
}
이 부분을,
for (int i = 0; i < str.length(); i++) {
if ('a' <= str.charAt(i) && str.charAt(i) <= 'z') {
English[str.charAt(i) - 97]++;
} else {
English[str.charAt(i) - 65]++;
}
}
이렇게 바꾸면 조금더 성능을 낼수 있다
결과
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준1085/JAVA] 직사각형에서 탈출 (0) | 2021.10.25 |
---|---|
[백준2167/JAVA] 2차원 배열의 합 (0) | 2021.07.21 |
[백준10809/JAVA] 알파벳 찾기 (0) | 2021.07.14 |
[백준8958/JAVA] OX 퀴즈 (0) | 2021.07.10 |
[백준3052/JAVA] 나머지 (0) | 2021.07.09 |