Algorithm/Java

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

보라해바라기 2023. 5. 27. 14:26
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