본문 바로가기
알고리즘 풀이/백준

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

by char_lie 2023. 5. 14.
반응형

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

 

1157번: 단어 공부

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

www.acmicpc.net

단어 공부 문제

알파벳 단어가 주어지면 단어에서 가장 많이 사용된 알파벳을 찾는 문제

📌문제 접근 포인트

1. 먼저 알파벳의 대소문자를 구분하지 않으나 출력은 대문자를 원하니, 대문자의 형태로 단어를 받아주자.
2. 단어 S에 존재하는 알파벳만 따로 모아주자. 이 알파벳을 이용해서, 각 알파벳 별로 존재하는 단어의 등장 갯수를 세어주자.
3. 단어별 갯수를 모은 리스트에서 최대 값을 구해주고, 이 최대값과 같은 숫자가 존재하는지 세어주자.
4. 같은 최대값이 1개 이상 더 존재하면 ?를, 아니면 그때의 최대값에 해당하는 알파벳을 출력하면 해결!

⚙ 내가 푼 정답 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine().toUpperCase();
        char[] S = input.toCharArray();
        HashSet<Character> Sr = new HashSet<>();
        for (char c : S) {
            Sr.add(c);
        }
        ArrayList<Integer> cnt = new ArrayList<>();
        for (char i : Sr) {
            int count = 0;
            for (char j : S) {
                if (i == j) {
                    count++;
                }
            }
            cnt.add(count);
        }
        int max = Integer.MIN_VALUE;
        int maxIndex = -1;
        for (int i = 0; i < cnt.size(); i++) {
            if (cnt.get(i) > max) {
                max = cnt.get(i);
                maxIndex = i;
            }
        }
        int maxCount = 0;
        for (int i = 0; i < cnt.size(); i++) {
            if (cnt.get(i) == max) {
                maxCount++;
            }
        }
        if (maxCount > 1) {
            System.out.println("?");
        } else {
            System.out.println(Sr.toArray()[maxIndex]);
        }
    }
}
반응형

댓글