백준 복호화

KIMYEONGJUN·2024년 12월 23일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

입력의 T(1 ≤ T ≤ 20)는 테스트 케이스로, 입력 제일 상단에 주어진다.
각각의 테스트 케이스는 한 줄마다 소문자와 공백으로 이루어진 영어 문장이 주어진다.
이 문장의 길이는 적어도 1이상이며 255이하다.

각각의 테스트 케이스에 대해, 가장 빈번하게 나타나는 문자를 출력하거나 빈번하게 나타나는 문자가 여러 개일 경우 '?'를 출력한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader를 사용하여 표준 입력으로부터 데이터를 읽는다.
첫 줄에서 테스트 케이스의 수 T를 읽어 정수로 변환한다
StringBuilder를 사용하여 결과를 저장할 준비를 한다.
for 루프를 통해 각 테스트 케이스를 처리한다.
각 줄을 읽어 line 변수에 저장한다.
HashMap을 사용하여 문자와 그 빈도를 저장한다.
line의 각 문자를 문자 배열로 변환하여 반복한다.
공백 문자는 제외하고, 각 문자의 빈도를 카운트하여 frequency 맵에 저장한다.
최대 빈도를 추적하기 위한 변수를 초기화한다.
mostFrequentChar는 가장 빈번한 문자를 저장하며, 초기값은 '?'로 설정한다.
isAmbiguous는 동일한 최대 빈도를 가진 문자가 발견되었는지를 나타난다.
빈도 맵의 각 항목을 순회하면서 현재 문자의 빈도(currentFreq)를 확인해준다.
만약 현재 빈도가 최대 빈도보다 크면, 최대 빈도를 업데이트하고 모호성을 해제한다.
동일한 최대 빈도가 발견되면 isAmbiguous를 true로 설정한다.
처리된 결과에 따라 StringBuilder에 '?' 또는 가장 빈번한 문자를 추가해준다.
모든 테스트 케이스의 결과를 출력해준다.

코드로 구현

package baekjoon.baekjoon_25;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

// 백준 9046번 문제
public class Main877 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine()); // 테스트 케이스 수
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < T; i++) {
            String line = br.readLine();
            Map<Character, Integer> frequency = new HashMap<>(); // 문자 빈도 저장

            for(char c : line.toCharArray()) {
                if(c != ' ') { // 공백은 제외
                    frequency.put(c, frequency.getOrDefault(c, 0) + 1);
                }
            }

            int maxFreq = 0;
            char mostFrequentChar = '?';
            boolean isAmbiguous = false;

            for(Map.Entry<Character, Integer> entry : frequency.entrySet()) {
                char currentChar = entry.getKey();
                int currentFreq = entry.getValue();

                if(currentFreq > maxFreq) {
                    maxFreq = currentFreq;
                    mostFrequentChar = currentChar;
                    isAmbiguous = false; // 새로운 최대 빈도가 발견되면 모호성 해제
                } else if(currentFreq == maxFreq) {
                    isAmbiguous = true; // 동일한 최대 빈도 발견
                }
            }

            if(isAmbiguous) {
                sb.append('?').append('\n');
            } else {
                sb.append(mostFrequentChar).append('\n');
            }
        }

        System.out.print(sb);
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글

관련 채용 정보