[백준] n.1157 - 가장 많이 사용된 알파벳 출력

    SMALL

    1. 문제
    https://www.acmicpc.net/problem/1157

     

    1157번: 단어 공부

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

    www.acmicpc.net

     

    2. 주요 개념

    - Scanner

    - split()
    - toUpperCase
    - equals()

    3. 나의 풀이 (*은 잘 안풀린 부분)

    import java.io.*;
    import java.util.*;
    
    class Main {
    
      public static void main(String[] args) {
    
        Scanner s = new Scanner(System.in);
    
        String str = s.nextLine();
        str = str.toUpperCase(); // **대문자로 변환
    
        String[] arr = str.split("");
        StringBuilder sb = new StringBuilder();
    
        // 중복 제거한 문자열
        for (String a : arr) {
          if (sb.indexOf(a) == -1) {
            sb.append(a);
          }
        }
    
        String[] sb_arr = sb.toString().split(""); // 중복 제거 문자들
    
        int[] cnt = new int[sb_arr.length];
    
        for (int i = 0; i < sb_arr.length; i++) {
          for (int j = 0; j < arr.length; j++) {
            if (sb_arr[i].equals(arr[j])) {
              // ** 문자열 비교: equals 사용
              cnt[i] += 1;
            }
          }
        }
    
        int max = 0; // 최댓값
        int maxIndex = 0;
        // **최댓값 인덱스 값
        // **나중에 결과 출력 시 필요!
    
        // 최댓값 찾기
        for (int g = 0; g < cnt.length; g++) {
          if (cnt[g] > max) {
            max = cnt[g];
            maxIndex = g;
          }
        }
    
        int max_num = 0;
        // 최댓값을 가진 배열의 개수
        for (int c = 0; c < cnt.length; c++) {
          if (cnt[c] == max) {
            max_num++;
          }
        }
    
        // 최댓값 개수에 따른 값 출력
        if (max_num >= 2) {
          System.out.println("?");
        } else if (max_num == 1) {
          System.out.println(sb_arr[maxIndex]);
        }
    
      }
    }



    4. 짚고 넘어가기!
    - 소문자 > 대문자 변환 : toUpperCase()
    - maxIndex > 최댓값 인덱스 사용하여 결과 출력시 인덱스 값으로 사용!
    - 문자열 비교 시, equals 사용! ex. str1.equals(str2)

    728x90

    댓글