[Algorithm] 백준: 1157 단어공부 (Java11)

m_ngyeong·2025년 3월 14일
0

Algorithm

목록 보기
6/8
post-thumbnail

1157 단어공부

문제 풀기 앞서,
.toCharArray()는 문자열을 문자 배열(char[])로 변환하는 메서드이다.
"HELLO"라는 문자열이 있다면:

char[] arr = "HELLO".toCharArray();
  • arr에는 ['H', 'E', 'L', 'L', 'O']가 저장됨

문제:

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

정답:

import java.util.Scanner;

public class Main{
    public static void main (String [] args){
        Scanner scan = new Scanner(System.in);
        String str = scan.next();
        scan.close(); // Scanner 닫기

        int[] alphabet = new int[26]; // 알파뱃 개수 저장 배열

        // 모든 문자를 대문자로 변환 후 개수 세기
        str = str.toUpperCase();
        for(char ch: str.toCharArray()){ 
            alphabet[ch - 'A']++; // 'A'를 0번 인덱스에 맞추기 & 해당 알파뱃 개수 증가
        }

        // 최대값 및 최빈 문자 찾기
        int maxCount = 0;
        char maxChar = '?';
        boolean duplicate = false;
        for(int i=0; i<26; i++){
            if(alphabet[i] > maxCount){
                maxCount = alphabet[i];
                maxChar = (char) (i+'A');
                duplicate = false; // 새로운 최대값이 나오면 중복 초기화
            }else if(alphabet[i] == maxCount){
                duplicate = true; // 최대값이 여러 개면 중복 처리
            }
        }
        System.out.print(duplicate ? "?": maxChar);
    }
}

코드 설명

문자열을 한 글짜씩 꺼내 반복하는 방식

for(char ch: str.toCharArray()){ // 향상된 for문(Enhanced for-loop)
            alphabet[ch - 'A']++;
}
  • str.toCharArray()가 문자열을 문자 배열(char[])로 변환
  • for 루프를 통해 배열의 각 문자를 하나씩 꺼내 ch에 저장하면서 반복
  • ch - 'A'를 이용해 알파벳이 'A'부터 0번 인덱스에 저장되도록 함
  • alphabet[ch - 'A']++: alphabet 배열에서 해당 알파벳의 개수를 증가시킴

배열 인덱스를 다시 알파벳 문자로 변환하는 것

maxChar = (char) (i + 'A');
  • i는 0~25 범위의 숫자
  • 'A'는 ASCII 코드 65 ... 'Z'는 90
  • i를 'A'에 더하면 해당 알파벳의 ASCII 코드 값이 나옴
  • 이를 (char)로 변환하면 해당 알파벳 문자가 됨

예제:

int maxIndex = 4; // 'E'가 가장 많이 등장했다고 가정
char maxChar = (char) (maxIndex + 'A'); // 'E'로 변환됨
System.out.println(maxChar);
profile
ʚȉɞ

0개의 댓글