본문 바로가기
Programming/Algorithm

[백준] 1157번 : 단어공부 (Java)

by 안녕주 2021. 7. 19.

문제

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

입력

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

출력

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


코드

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String letter = sc.next();
        int[] arr = new int[26];

        for (int i = 0; i < letter.length(); i++){
            if ( 'A' <= letter.charAt(i) && letter.charAt(i) <= 'Z' ){ //대문자  65 <= ... <= 90
                arr[letter.charAt(i) - 'A']++; //65
            }
            else { //소문자
                arr[letter.charAt(i) - 'a']++; //97
            } 
        }

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

        for (int j = 0; j <26; j++){
            if (arr[j] > max){
                max = arr[j];
                ch = (char) (j+65); //대문자로 출력해줘야ㅑ함
            }
            else if (arr[j] == max){
                ch = '?';
            }
        }
        System.out.println(ch);
    }
}

풀이

?를 출력해야하는 부분 for문을 짜는데 있어서 어려움이 있어서 구글링을 통해 문제를 풀었다.

 

1. 입력받은 문자열을 하나하나 문자로 다 쪼개서 해당 위치에 맞는 배열에 값을 ++해준다.

2. 그 배열 값을 하나하나 다 비교를 해서 max 값을 가진 문자를 찾는다.

3. 만약 빈도수가 동일한 문자가 있다면 ?를 출력한다.

 

이 3가지를 유의해서 문제를 풀면된다.

댓글