본문 바로가기

코딩테스트/백준

[백준-자바] 1157번 단어 공부 / 2022.01.23

 

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

 

 

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 출력