본문 바로가기

Algorithm

[Java] 백준 1157 : 단어 공부

📌 문제

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

📌 풀이

  • 알파벳 개수를 확인하기 위하여 26칸의 배열 크기를 생성한다. (알파벳 개수가 26개)
  • 반복하기에 앞서 입력한 값을 toUpperCase() 메서드를 통해 대문자로 변환
  • 대문자의 범위는 십진수로 65~90이고, 소문자는 97~122이다. (아스키코드표 참고)
  • 해당 알파벳의 인덱스 값을 가져오기 위해서 -65를 해주면 된다.
    • A는 65 이므로 65를 빼면 0
    • C는 67 이므로 65를 빼면 2
    • Z는 90 이므로 65를 빼면 25
  • 입력한 문자열의 값을 하나씩 순회하면서 해당 위치에 ++ 를 해준다.
  • 최댓값 찾기 위해 max 변수와 문자 나온 값이 같은 경우? 출력을 위한  ch 변수 생성
    • alphabet 배열 안에 해당하는 문자가 없을 시 초기값으로 0으로 주어지기 때문에 max = -1
  • alphabet 배열을 순회하면서 max 보다 클 경우 해당 값을 max에 저장하고, 대문자 이므로 ch 변수에 대문자 출력하기 위해 i + 65
  • max와 값이 같은 게 나오면? 출력

 

📌 코드

package baekjoon;

import java.util.Scanner;

public class Q1157_1 {  // 단어 공부
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[] alphabet = new int[26];
        String str = scanner.nextLine().toUpperCase();

        for (int i = 0; i < str.length(); i++) { // 입력한 알파벳 개수 확인
            int tempNum = str.charAt(i) - 65; // 값을 하나씩 가져와서 대문자 - A
            alphabet[tempNum]++;    // 해당 위치에 ++
        }

        int max = -1; // 배열안에 초기 값이 0이므로 -1로 지정
        char ch = '?';
        for (int i = 0; i < alphabet.length; i++) { // 최대값 찾기
            if (alphabet[i] > max) {
                max = alphabet[i];
                ch = (char) (i + 65);
            } else if (alphabet[i] == max) {
                ch = '?';
            }
        }
        System.out.println(ch);
    }
}

'Algorithm' 카테고리의 다른 글

[Java] 백준 3028 : 창영마을  (0) 2022.06.21
[Java] 백준 1032 : 명령 프롬프트  (0) 2022.06.08
[Java] 백준 11944 : NN  (0) 2022.04.01
[Java] 백준 2864번 : 5와 6의 차이  (0) 2022.03.27
[Java] 백준 10820번 : 문자열 분석  (0) 2022.03.16