알고리즘/알고리즘 공부(JAVA)

알고리즘_백준_1157_단어 공부 Using_By(Java)

소소한필통 2022. 8. 29. 23:57

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

이 문제는 주어진 input에 대해서 가장 많이 쓰인 알파벳을 대문자로 출력하는 것이다.

 

방법

1. 대문자로 출력의 문제이기에 편리를 위해 입력값도 모두 대문자로 변환(String.toUpperCase() : 모두 대문자로 변경)

2. 알파벳은 'A~Z'는 총 26개이다. 26크기의 배열 2개 선언 하나는 중복됫는지 확인을 위함, 하나는 가장 큰 문자의 위치를 파악하기 위함

3. 입력 문자열 길이만큼 반복문 수행

4. 배열 하나를 정렬 후 젤뒤와 젤뒤앞이 같으면 가장 많은 문자가 같으므로 "?"출력

5. 아니면 배열을 순서대로 확인해서 그 위치가 어디인지 확인하기

 

import java.util.Arrays;
import java.util.Scanner;

public class Backjoon_1157 {
  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    String input = sc.next();
    input = input.toUpperCase();

    int[] arr = new int[26];
    int[] Tarr = new int[26];

    for (int i = 0; i < input.length(); i++) {
      int temp = input.charAt(i) - 'A';

      arr[temp] += 1;
      Tarr[temp] += 1;
    }

    Arrays.sort(Tarr);
    int max = 0;
    int count = 0;
    if (Tarr[25] == Tarr[24]) {
      System.out.println("?");
    } else {
      for (int i = 0; i < arr.length; i++) {
        if (max < arr[i]) {
          max = arr[i];
          count = i;
        }
      }
      count = count + 65;
      // 해당 알파벳 위치에 처음에 빼준 A를 더해줌
      char answer = (char) count;
      System.out.println(answer);
    }

  }
}