알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
<입력>
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
<출력>
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
추상화
1) 먼저 문자열을 대문자로 모두 바꾼다
2) 문자열에서 각 알파벳의 개수를 추출한다
i) 아스키코드 A~ Z(65번~122번)을 이용
ii) 각 알파벳의 개수를 담을 배열 생성(알파벳은 26개)
3) 가장 큰 알파벳의 개수를 추출한다
→반복문과 조건문을 통해 최대값을 구할 수 있다
4) 최대값의 수가 2개 이상인 경우 ?을 출력한다
→count 변수를 만들고 최대값이 겹칠 때마다 1을 증가시킨다
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int[26];
//알파벳의 개수는 26개, 배열의 크기를 26개로 해준다
int max = 0;
//최대값 변수
int count = 0;
//최대값의 개수를 세어줄 count를 지정한다
char ch ='?';
//출력할 ch의 기본값은 ?이다
String s = br.readLine().toUpperCase();
//대문자로 바꿔준다
for(int i =0; i<26; i++) {
arr[i] = countChar(s,(char)(65+i));
}
//해당 문자열의 개수를 세어주는 메소드를 만들었고 반복문으로 적용했다
for(int i = 0; i<26; i++) {
if(arr[i]>max) {
max = arr[i];
ch = (char)(65+i);
count = 0;
}
if(arr[i]==max) {
count++;
}
//최대값을 구하고 같은 최대값을 만날 때마다 count가 증가한다
}
if(count ==1) {
System.out.println(ch);
}else { System.out.println('?');}
}
private static int countChar(String s, char c) {
int count = 0;
for(int i =0; i<s.length(); i++) {
if(s.charAt(i)==c) {
count++;
}
}
return count;
}
}
반복문을 합칠 수도 있다
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int[26];
int max = 0;
char ch ='?';
int count = 0;
String s = br.readLine().toUpperCase();
for(int i =0; i<26; i++) {
arr[i] = countChar(s,(char)(65+i));
if(arr[i]>max) {
max = arr[i];
count = 0;
ch = (char)(65+i);
}
if(arr[i]==max && arr[i] !=0) {
count ++;
}
}
if(count ==1) {
System.out.println(ch);
}else { System.out.println('?');}
}
private static int countChar(String s, char c) {
int count = 0;
for(int i =0; i<s.length(); i++) {
if(s.charAt(i)==c) {
count++;
}
}
return count;
}
}
'Study > Baekjoon' 카테고리의 다른 글
Baekjoon2941*: 크로아티아 알파벳 (0) | 2021.10.11 |
---|---|
Baekjoon5622: 다이얼 (0) | 2021.10.11 |
Baekjoon2908: 상수 (0) | 2021.10.10 |
Baekjoon1065: 한수 (0) | 2021.10.09 |
Baekjoon4673: 셀프 넘버, 논리 배열과 StringBuilder의 사용 (0) | 2021.10.08 |