백준 Baekjoon 1371번 가장 많은 글자 - JAVA

Jaeho Kim·2022년 4월 13일
1

코딩테스트

목록 보기
9/110

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

문제
영어에서는 어떤 글자가 다른 글자보다 많이 쓰인다. 예를 들어, 긴 글에서 약 12.31% 글자는 e이다.
어떤 글이 주어졌을 때, 가장 많이 나온 글자를 출력하는 프로그램을 작성하시오.

입력
첫째 줄부터 글의 문장이 주어진다. 글은 최대 50개의 줄로 이루어져 있고, 각 줄은 최대 50개의 글자로 이루어져 있다. 각 줄에는 공백과 알파벳 소문자만 있다. 문장에 알파벳은 적어도 하나 이상 있다.

출력
첫째 줄에 가장 많이 나온 문자를 출력한다. 여러 개일 경우에는 알파벳 순으로 앞서는 것부터 모두 공백없이 출력한다.

예제 입력 1
english is a west germanic
language originating in england
and is the first language for
most people in the united
kingdom the united states
canada australia new zealand
ireland and the anglophone
caribbean it is used
extensively as a second
language and as an official
language throughout the world
especially in common wealth
countries and in many
international organizations
예제 출력 1

a

예제 입력 2

baekjoon online judge

예제 출력 2

eno

예제 입력 3

abc a

예제 출력 3

a

예제 입력 4

abc
ab

예제 출력 4

ab

예제 입력 5

amanda forsaken bloomer meditated gauging knolls
betas neurons integrative expender commonalities
latins antidotes crutched bandwidths begetting
prompting dog association athenians christian ires
pompousness percolating figured bagatelles bursted
ninth boyfriends longingly muddlers prudence puns
groove deliberators charter collectively yorks
daringly antithesis inaptness aerosol carolinas
payoffs chumps chirps gentler inexpressive morales

예제 출력 5

e
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int[] alphabet = new int[26];
 
        while (scan.hasNextInt()) {
            String str = scan.nextLine();
            for (int i = 0; i < str.length(); i++) {
                if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') {
                    alphabet[str.charAt(i) - 'a']++;
                }
            }
        }
 
        int max = 0;
        for (int i = 0; i < 26; i++) {
            if (max < alphabet[i]) {
                max = alphabet[i];
            }
        }
 
        for (int i = 0; i < 26; i++) {
            if (max == alphabet[i]) {
                System.out.print((char) (i + 'a'));
            }
        }
    }
}
  • 설명
    • 문자열의 끝을 판단하는 hasNextLine()를 이용했으나 무한루프가 발생했다..... 내시간..
    • NextLine() 메소드는 엔터만을 감지하여 엔터 전까지의 모든것을 입력받겠다.
    • hasNextLine() 메소드는 boolean으로 다음줄에 입력이 있는지 여부를 판단해 입력이 있으면 True, 업다면 false 반환
      이를 clase()로 닫아주지 않으면 무한루프에 빠질 수 있다.. ㅇㅅㅇ
    • 흥미로웠던 점은 아스키코드값 연산을 이용하여 배열순서 자체를 알파벳순서로 하고, 해당 아스키 코드값일때 그 배열에 들어 갈 수 있도록
    • 작성했다는 점이다. 처음에는 HashMap을 이용하여 각 배열에 값을 넣어주고 containskey를 이용해서 값을 비교하였는데, 알파벳처럼
    • 이미 순서를 정할 수 있는 배열은 굳이 map을 쓸 필요가 없다는걸 배웠다.
profile
Hello, World!

0개의 댓글