문제
- 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
- 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
- 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
입출력 예제
설명
- 문제를 읽으면서 내가 느낀점은 "아스키코드"를 사용하라고 말하는 것 같았다... 나만 그런건가? 문자의 개수를 count할 때 대문자 (A~Z = 65~90) , 소문자 (a~z = 96~122) 의 구분없이 count++ 해주면 된다. 쉽게 설명하기 위해서 간단히 그림을 그렸다~ 대문자,소문자를 Index로 사용하기 위한 작업과 AadDDe 라는 입력의 결과로 배열의 결과를 볼수 있는 두가지 그림이 있다.
코드
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
26
27
28
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
// 1157 - 단어공부
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int [] charCntArray = new int[26];
char[] charArray = br.readLine().toCharArray();
int minus, maxNum, maxIndex = 0;
for(int i=0; i<charArray.length; i++) {
minus = charArray[i] > 90 ? 97 : 65;
charCntArray[charArray[i] - minus]++;
}
maxNum = charCntArray[maxIndex];
for(int i=1; i<charCntArray.length; i++) {
if(maxNum < charCntArray[i]) {
maxNum = charCntArray[i];
maxIndex = i;
} else if(maxNum == charCntArray[i]) {
maxIndex = -2;
}
}
System.out.println((char)(maxIndex + 65));
}
}
|
cs |
'Algorithm > Baekjoon' 카테고리의 다른 글
백준(2908번) 상수 (0) | 2021.07.25 |
---|---|
백준(1152번) 단어의 개수 (0) | 2021.07.25 |
백준(2675번) - 문자열 반복 (0) | 2021.07.22 |
백준(10809) - 알파벳 찾기 (0) | 2021.07.19 |
백준(11720번) - 숫자의 합 (0) | 2021.07.18 |