Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

luke

[백준] - 단어 공부 (1157) (자바/Java) 본문

알고리즘문제/백준 문제(Java)

[백준] - 단어 공부 (1157) (자바/Java)

luke-king 2024. 2. 18. 18:08

 

 

 

 

 

 

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);

        int[] arr = new int[26]; //영문자의 개수 26개
        String str = sc.next();

        for (int i = 0; i < str.length(); i++) {

            if ('A' <= str.charAt(i) && str.charAt(i) <= 'Z') { //대문자 범위
                arr[str.charAt(i) - 'A']++; //해당 인덱스의 값 1 증가
            } else { //소문자 범위
                arr[str.charAt(i) - 'a']++;
            }
        }

        int max = -1;
        char ch = '?';

        for (int i = 0; i < 26; i++) {
            if (arr[i] > max) {
                max = arr[i];
                ch = (char) (i + 65); //대문자로 출력해야하므로 65를 더해줌.
            } else if (arr[i] == max) {
                ch = '?';
            }
        }

        System.out.println(ch);

    }

}

 

이번 문제 쉽지 않았던것 같다..

 

반복문을 돌면서 해당 문자가 어떤 문자인지 따라 해당 배열 원소를 증가 시켜주어야 한다.

두 가지 케이스가 있는데, 대문자인 경우와 소문자인 경우 이다.

하지만 문제에서 대소문자는 구분하지 않는다고 했으니 대문자로 입력 받던, 소문자로 입력받던 같은 배열 원소의 값을 증가시켜야 한다.

 

예를 들면 a 와 A 가 있을 때 배열 arr 원소 중 증가시켜야 할 인덱스는 arr[0]으로 같다는 것이다.

 

계산 하기위해 표를 봐보자

 

 

 

보면 대문자의 범위는 십진수로 65 ~ 90 이다.

소문자의 범위는 97 ~ 122 이다.

즉 C 를 입력받았을 때, 배열의 세 번째 원소인 2을 도출해내려면 C 는 67이니 65를 빼주면 된다.

만약 소문자 e 를 입력받았을 경우에는 다섯 번째 원소인 4 를 도출해야하니 97을 빼주면 101 - 97 = 4로 배열의 인덱스 값을 도출할수 있다.

 

 

 

 

 

 

 

※참고 : https://st-lab.tistory.com/64