본문 바로가기

Algorithm/Baekjoon

백준(1157번) - 단어 공부

백준(1157번) - 단어 공부

 

1157번: 단어 공부

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

www.acmicpc.net

 

문제

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

입력

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

출력

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

 

입출력 예제

 

설명

  • 문제를 읽으면서 내가 느낀점은 "아스키코드"를 사용하라고 말하는 것 같았다... 나만 그런건가?   문자의 개수를 count할 때 대문자 (A~Z = 65~90) , 소문자 (a~z = 96~122) 의 구분없이 count++ 해주면 된다.  쉽게 설명하기 위해서 간단히 그림을 그렸다~  대문자,소문자를 Index로 사용하기 위한 작업과 AadDDe 라는 입력의 결과로 배열의 결과를 볼수 있는 두가지 그림이 있다.

배열의 Index로 사용하기 위한 작업

 

 

 

입력에 대한 실제 배열의 결과

 

코드

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
    // 1157 - 단어공부
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int [] charCntArray = new int[26];
        char[] charArray = br.readLine().toCharArray();
        int minus, maxNum, maxIndex = 0;
        
        for(int i=0; i<charArray.length; i++) {
            minus = charArray[i] > 90 ? 97 : 65;
            charCntArray[charArray[i] - minus]++;
        }
        maxNum = charCntArray[maxIndex];
        for(int i=1; i<charCntArray.length; i++) {
            if(maxNum < charCntArray[i]) {
                maxNum = charCntArray[i];
                maxIndex = i;
            } else if(maxNum == charCntArray[i]) {
                maxIndex = -2;
            }
        }
        System.out.println((char)(maxIndex + 65));
    }
}
cs

'Algorithm > Baekjoon' 카테고리의 다른 글

백준(2908번) 상수  (0) 2021.07.25
백준(1152번) 단어의 개수  (0) 2021.07.25
백준(2675번) - 문자열 반복  (0) 2021.07.22
백준(10809) - 알파벳 찾기  (0) 2021.07.19
백준(11720번) - 숫자의 합  (0) 2021.07.18