문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
예제 입력 1 복사
Mississipi
예제 출력 1 복사
?
예제 입력 2 복사
zZa
예제 출력 2 복사
Z
예제 입력 3 복사
z
예제 출력 3 복사
Z
예제 입력 4 복사
baaa
예제 출력 4 복사
A
1. For문으로 나타내기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] chArr = br.readLine().toUpperCase().toCharArray(); // 대문자로 만들고, 문자배열로
int[] arr = new int[26]; // 각 문자들의 빈도수를 나타내기 위한 배열
int max = -1; // 가장 많이 사용된 알파벳
char c = ' '; // 출력 문자
for(int i=0;i<chArr.length;i++) {
arr[chArr[i]-'A'] ++; // chArr의 값이 중복될 때 arr 인덱스의 값 ++
if(arr[chArr[i]-'A']> max) { // 가장 많이 사용된 알파벳이 max보다 크다? == 많이 사용된 것
max = arr[chArr[i]-'A'];
c = chArr[i];
}else if(arr[chArr[i]-'A']==max) { // 가장 많이 사용된 알파벳이 이미 있으면 ? 출력
c = '?';
}
}
System.out.println(c);
}
}
- 문자열 문제만 계속 푸니까 str.charAt과 charArray의 코드 교환이 가능해진다 슉슉
- toCharArray로 해서 chArr로 만들기는 했는데 그런거 필요없이 그냥 String으로 해서 arr[str.charAt[i]-'A']로 해도 된다..!
- int 배열로 안하고 boolean 배열로 해봤는데 결국 마지막 네 번째 예제가 계속 틀려서 결국 boolean으로 하진 못하고 int로 배열로 했다.
- 중복이라고 해서 HashSet도 생각해봤는데 HashSet은 아예 중복 제거를 해서.. 탈락.. 그리고 시간이 더 걸릴 것 같았다..!
'algorithm > Baekjoon' 카테고리의 다른 글
[백준] 2750 수 정렬하기(Arrays.sort, 선택, 삽입, 퀵) (0) | 2022.10.13 |
---|---|
[백준] 2908 상수 (0) | 2022.10.11 |
[백준] 2675 문자열 반복 (0) | 2022.10.05 |
[백준] 10809 알파벳 찾기 (0) | 2022.10.05 |
[백준] 4673 셀프 넘버 (0) | 2022.09.29 |