- 백준 1157번: 단어 공부
- 문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
- 입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
- 출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class BOJ_1157 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine().toUpperCase();
int maxCnt = 0; // 가장 많이 사용된 횟수
String result = ""; // 가장 많이 사용된 문자
char[] strToChar = input.toCharArray();
Arrays.sort(strToChar); // A-Z 순으로 정렬
input = new String(strToChar);
for(int i = 0 ; i < input.length() ; i++) {
char x = input.charAt(i);
int cnt = 0;
for(int j = 0 ; j < input.length() ; j++) {
if(x == input.charAt(j)) {
cnt++;
}
}
if(cnt > maxCnt) { // 기존 횟수보다 더 많을 경우
maxCnt = cnt;
result = x + "";
}
else if(maxCnt == cnt) { // 최대 횟수가 동일할 경우
result = "?";
}
i = input.lastIndexOf(x) + 1; // 다음 문자로 이동
}
br.close();
System.out.println(result);
}
}
+ 추가 풀이
package boj;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ_1157 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int[26]; // 알파벳 개수를 담을 배열
int max = -1;
char ch = '?';
String input = br.readLine().toUpperCase();
for(int i = 0 ; i < input.length() ; i++) {
arr[input.charAt(i) - 'A']++; // 알파벳 개수 세기
}
for(int i = 0 ; i < 26 ; i++) {
if(arr[i] > max) { // 알파벳 사용횟수 비교
max = arr[i];
ch = (char)(i + 65);
}
else if(arr[i] == max) { // 최대 사용횟수가 동일할 경우
ch = '?';
}
}
br.close();
System.out.println(ch);
}
}