새발블로그

[백준/Java] 1157 단어 공부 본문

Problem Solving/Baekjoon

[백준/Java] 1157 단어 공부

EUG 2025. 3. 24. 22:36

문제

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

 

풀이방법

먼저, 대소문자를 구분하지 않으므로 소-> 대 , 대-> 소 중에 변환하려했는데 최종 값이 대문자이므로 대문자로 변환하였다.

각 알파벳의 출현빈도를 저장하였고, 문자열을 순회하며 출현 빈도를 배열에 저장한다.

가장 많이 출현한 알파벳을 찾고, 동일한 빈도수가 있다면 ?를 출력할 수 있도록 한다.

 

++

for문

for (char c: arr) {
// 배열 arr의 각 요소 c에 대해 반복
}

 문자와 정수간의 연산

문자 'A'의 ASCII 값은 65이므로, 'A'를 0으로 맞추기 위해서는 'A'를 빼준다 

 

'A' - 0, 'B' -1, ..... 'Z' 25

 

풀이

import java.io.*;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        String word = sc.nextLine().toUpperCase();

        int[] alpha = new int[26];
        char[] arr = word.toCharArray();

        for (char c : arr) {
            if (c >= 'A' && c <= 'Z') {
                alpha[c - 'A']++;
            }
        }

        int maxCnt = 0;
        char maxChar = '?';
        boolean isDuplicated = false;

        for (int i = 0; i < 26; i++) {
            if (alpha[i] > maxCnt) {
                maxCnt = alpha[i];
                maxChar = (char) (i + 'A');
                isDuplicated = false;
            } else if (alpha[i] == maxCnt) {
                isDuplicated = true;
            }
        }

        if (isDuplicated) {
            System.out.println('?');
        } else {
            System.out.println(maxChar);
        }
    }
}

 

 

'Problem Solving > Baekjoon' 카테고리의 다른 글

[백준/Java] 4949 균형잡힌 세상  (0) 2025.03.30
[백준/Java] 1541 잃어버린 괄호  (1) 2025.03.26
[백준/Java] 1152 단어의 개수  (1) 2025.03.23
[백준/Java] 1032 명령 프롬프트  (0) 2025.03.23
[백준/C++] 1008번  (0) 2024.03.04