https://www.acmicpc.net/problem/1157
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int number;
int [] alpha = new int [26];
for(int i=0; i<str.length(); i++) {
if(str.charAt(i) >= 'A' && str.charAt(i) <='Z') { // 대문자
number = str.charAt(i) - 65;
alpha[number]++;
}
if(str.charAt(i) >= 'a' && str.charAt(i) <= 'z') { // 소문자
number = str.charAt(i) - 97;
alpha[number]++;
}
}
int size = alpha[0];
int maxNumber = 0;
char maxAlpha = 'A';
// 가장 많은 알파벳 찾기
for(int i=1; i<26; i++) {
if(size < alpha[i]) {
size = alpha[i];
maxNumber = i; // 가장 많은 알파벳의 배열 넘버
maxAlpha = (char)(i+65);
}
}
// 위에서 구한 가장 많은 알파벳과 동일한 수의 알파벳이 있는가?
// 있다면 ?를 출력할 수 있도록 count++
int count = 1;
for(int i=0; i<26; i++) {
if(i != maxNumber) {
if(alpha[maxNumber] == alpha[i]) {
count++;
}
}
}
if(count >= 2) {
System.out.println("?");
}
else {
System.out.println(maxAlpha);
}
}
}
풀이 :
1. 알파벳 배열 생성 (int [] alpha = new int [26];)
각각 배열의 0번은 a 1번은 b 2번은 c -> 25번은 z를 가리킨다
2. 문자열을 입력 받은 후 문자로 쪼갬 여기서, 아스키코드를 사용 : 대문자라면 - 65 소문자라면 -97
ex) A의 아스키코드값은 65이므로 -65를 해주면 0
a의 아스키코드값은 97이므로 -97를 해주면 0
위의 배열에서 0번은 A와 a를 가리키므로 배열의 0번의 값을 ++ 해준다
3. 가장 많은 알파벳 찾기 ( 가장 큰 수를 찾는 방식과 동일)
가장 많은 알파벳을 찾으면 maxNumber 변수 값에 해당 배열 넘버를 저장해주고, maxAlpha 변수에는 형변환을 사용하여 해당 알파벳을 저장해준다
4. 가장 많은 알파벳의 수와 동일한 수의 알파벳이 있는지 찾아야한다. (count변수 사용) -> 있다면 ? 출력, 없다면 위에서 구했던 maxAlpha 출력
'코딩테스트 > 백준' 카테고리의 다른 글
[백준-자바] 2292번 벌집 / 2022.01.23 (0) | 2022.01.23 |
---|---|
[백준-자바] 1193번 분수찾기 / 2022.01.23 (0) | 2022.01.23 |
[백준-자바] 10809번 알파벳 찾기 / 2022.01.23 (0) | 2022.01.23 |
[백준-자바] 3052번 나머지 / 2022.01.23 (0) | 2022.01.23 |
[백준-자바] 10250번 ACM 호텔 / 2022.01.23 (0) | 2022.01.23 |