728x90
반응형
SMALL
📌문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
📌입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
📌출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
📌코드
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int[] arr = new int[26];
//알파벳의 수는 총 26개이기에 26개의 배열을 선언한다.
String st = sc.next();
// 문자열을 입력받는다.
for(int i =0; i<st.length(); i++ ){
// 입력받은 문자열을 첫번째 문자부터 ~ 끝까지 검사하기 위해 반복문을 사용한다.
// 입력받은 알파벳은 대,소문자를 구분하지 않는다.
// 아스키코드에서 대문자 A는 65 , 소문자 a는 97
// 대문자 Z는 90 , 소문자 z는 122
if(65 <= st.charAt(i) && st.charAt(i) <=90){
// 입력받은 문자열을 문자단위로 끊은 문자가 대문자 범위라면
arr[st.charAt(i) -65]++;
// 해당 인덱스의 값을 증가시킨다.
} else{ // 아니면 소문자 범위라면
arr[st.charAt(i) - 97]++;
// 해당 인덱스의 값을 증가시킨다.
}
// 모든 문자열의 검사를 끝낸다.
}
int max = 0;
// 배열의 원소들 값을 비교하기 위해 가장 큰 값을 가지고 있는 인덱스 문자를 출력해야하기에
// 최대값을 저장할 max변수를 선언한다.
char ch = '?';
// 출력할 문자변수 ch를 선언한다.
for(int i=0; i<26; i++){
// 배열들을 순회하기 위해 반복문을 작성한다.
if(arr[i] > max){
// 배열안의 인덱스가 최대값보다 클 경우
max = arr[i];
//해당 원소값을 최대값으로 저장
ch = (char)(i + 65);
// ch 문자를 해당 인덱스에 해당하는 문자로 대치함
// 대문자로 출력하여야 하기에 65를 더해준다.
}else if(arr[i] == max){
// 만약 배열안의 원소값이 최대값과 같다면
// 즉, 그렇다면 최대값이 최소 2개 이상이라는 의미기에
ch = '?';
// ch를 ? 로 저장한다.
}
}
System.out.print(ch);
}
}
728x90
반응형
LIST
'Algorithm > 백준알고리즘' 카테고리의 다른 글
[백준알고리즘] 문자열 6단계 -1152번 단어의 개수(JAVA) (0) | 2022.07.19 |
---|---|
[백준알고리즘] 문자열 4단계 -2675번 문자열 반복(JAVA) (0) | 2022.07.07 |
[백준알고리즘] 문자열 3단계 -10809번 알파벳 찾기(JAVA) (0) | 2022.07.06 |
[백준알고리즘] 문자열 2단계 -11720번 숫자의 합(JAVA) (0) | 2022.07.05 |
[백준알고리즘] 문자열 1단계 -11654번 아스키 코드(JAVA) (0) | 2022.07.04 |