문자열을 이루는 각 문자의 아스키코드 값을 활용하여 풀이에 접근한다.
a~z까지 담을 수 있는 26 크기의 int형 배열을 선언한다.
a부터 인덱스 0번이라 가정하면, b는 인덱스 1번, ... , z는 인덱스 25번이다.
입력 받은 문자열의 각 문자마다 아스키코드 값을 받아 대·소문자의 경우를 나누어 판단한다.
소문자일 경우 a=97, b=98, ... 이므로 alphabet[n-97]++;
대문자일 경우 A=65, B=66, ... 이므로 alphabet[n-65]++;
위의 방식으로 배열에 문자 개수를 카운트한다.
모든 문자의 개수가 카운트 되면 가장 빈도수가 많은 단어(배열에 저장된 수 중 최댓값 이용)를 출력해야 한다.
고려해야 할 점, 카운트 개수가 가장 크다고 해서 유일한 최댓값이 아닐 수 있다.
최댓값이 하나가 아니라면 "?" 를 출력한다.
package BaekJoon;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
public class BaekJoon1157 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String st = br.readLine();
int alphabet[] = new int[26];
int max = 0;
for(int i=0; i<st.length(); i++) {
int n = st.charAt(i);
if(n < 91) {
alphabet[n-65]++;
}
else {
alphabet[n-97]++;
}
}
for(int i=0; i<26; i++) {
if(alphabet[i] >= alphabet[max]) {
max = i;
}
}
for(int i=0; i< 26; i++) {
if(i!=max && alphabet[max]==alphabet[i]) {
bw.write('?');
bw.close();
return;
}
}
char ch = (char) (max + 65);
bw.write(ch);
bw.close();
}
}
[출처]
https://www.acmicpc.net/problem/1157
'CODING > BAEKJOON' 카테고리의 다른 글
[BAEKJOON] 5622번 다이얼 (0) | 2022.01.29 |
---|---|
[BAEKJOON] 2908번 상수 (0) | 2022.01.28 |
[BAEKJOON] 10809번 알파벳 찾기 (0) | 2022.01.27 |
[BAEKJOON] 11720번 숫자의 합 (0) | 2022.01.27 |
[BAEKJOON] 2523 별 찍기 - 13 (0) | 2022.01.26 |
댓글