[백준] 1157번 : 단어 공부

JIHYUN·2021년 10월 13일
0
post-thumbnail

📌 문제

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

📌 입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

📌 출력

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

📌 예제 입력

📌 사용언어 : JAVA

📌 solution

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine().toUpperCase();
        scan.close();
        int[] count = new int[26];

        for (int i = 0; i < str.length(); i++) {
            int num = str.charAt(i) -'A' ;
            count[num]++;
        }

        int max = 0;
        char answer = '?';
        for (int i = 0; i < count.length; i++) {
            if(max < count[i]){
                max = count[i];
                answer = (char)(i+'A');
            } else if (max == count[i]){
                answer = '?';
            }
        }
        System.out.println(answer);
    }
}

😎 풀이

우선 입력받은 문자열 strtoUpperCase() 메서드를 사용해서 모두 대문자로 만들어준다. 이렇게 하면 대문자만 카운트하면 되기 때문에 편해진다.
그리고 각 알파벳이 몇 개가 있는지 알기 위해 배열 count를 만들어준다. 알파벳의 갯수만큼을 길이로 한다.
이제 for문을 str의 길이만큼 반복하며 str의 각 문자를 int형인 num변수에 담아준다. 아무렇게나 담으면 각 문자의 아스키코드 값이 num에 담기므로 A의 아스키값 만큼 빼준다.

  • 여기서 만약 str.charAt(i)A라면 num에는 0이 담길 것이고, B라면 1이 담길 것이다.

그렇게 num값을 담아주면 count[num]을 1 증가시킨다. 이제 count[0]A가 몇 개 잇는지, count[1]B가 몇 개 있는지, count[25]Z가 몇 개 있는지를 나타내게 된다.
이렇게 구한 countfor문을 돌리며 max값에 따라 answer에 알맞은 답을 넣어주면 된다.

profile
이것저것 공부중

0개의 댓글