코딩테스트

자바 문자열 문제 풀이 기록 (백준 10808, 1157)

dev-nadan 2025. 7. 21. 18:44

1. 문제 개요

오늘은 백준에서 문자열 관련 입문 문제 2개를 풀었다.

  • 10808번 - 알파벳 개수
  • 1157번 - 단어 공부

문제를 풀면서 자바에서 문자열을 다루는 기본 방법과,
특히 알파벳 개수를 배열로 세는 방식을 확실히 익힐 수 있었다.

 

2. 핵심 개념 정리

문자열에서 알파벳 개수를 세는 기본 패턴

int[] count = new int[26]; 
for (int i = 0; i < str.length(); i++) { 
	char ch = str.charAt(i); count[ch - 'a']++; 
    }
  • 알파벳은 총 26개 (a~z)
  • 'a'는 아스키코드 97 → 'a' - 'a' = 0, 'b' - 'a' = 1 ...
  • 배열의 인덱스를 알파벳에 대응시켜 개수를 저장할 수 있음

대소문자 구분 없이 처리하려면?

 
String upper = str.toUpperCase(); 
count[upper.charAt(i) - 'A']++;

 

3. 백준 10808번 - 알파벳 개수

문제 설명

주어진 문자열에서 알파벳 a부터 z까지 각각 몇 번 등장했는지 출력한다.
출력은 공백으로 구분된 숫자 26개.

코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();

        int[] count = new int[26];

        for (int i = 0; i < s.length(); i++) {
            count[s.charAt(i) - 'a']++;
        }

        for (int i = 0; i < 26; i++) {
            System.out.print(count[i] + " ");
        }
    }
}
 
 

4. 백준 1157번 - 단어 공부

문제 설명

주어진 영어 단어에서 가장 많이 등장한 알파벳을 출력한다.
여러 개일 경우 ?를 출력하고, 대소문자는 구분하지 않는다.

핵심 포인트

  • toUpperCase()로 대소문자 통일
  • 알파벳 개수 배열 만들기
  • 최댓값을 찾아 중복 여부 판단
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next().toUpperCase();

        int[] count = new int[26];

        for (int i = 0; i < a.length(); i++) {
            count[a.charAt(i) - 'A']++;
        }

        int max = -1;
        char result = '?';

        for (int i = 0; i < 26; i++) {
            if (count[i] > max) {
                max = count[i];
                result = (char)(i + 'A');
            } else if (count[i] == max) {
                result = '?';
            }
        }

        System.out.println(result);
    }
}

5. 배운 점 정리

  • 알파벳 개수를 세는 문제는 자바 배열을 활용하면 쉽게 해결할 수 있다.
  • 문자를 배열 인덱스로 변환할 때 'a', 'A'를 기준으로 빼주는 방식은 매우 유용하다.
  • 최댓값을 찾고, 중복 여부를 조건문으로 판단하는 패턴도 코딩테스트에서 자주 쓰인다.

 

6. 자바 문자열 문제 유형별 핵심 패턴 정리표

문자 하나씩 순회 문자열에서 한 글자씩 꺼내기 for (int i = 0; i < str.length(); i++)
char ch = str.charAt(i);
알파벳 개수 세기 a~z 알파벳 등장 횟수 저장 int[] count = new int[26];
count[ch - 'a']++;
대소문자 통일 소문자/대문자 통일 처리 str.toUpperCase() 또는 str.toLowerCase()
문자 → 배열 인덱스 문자를 숫자로 바꾸는 패턴 'a' = 0 → ch - 'a'
'A' = 0 → ch - 'A'
배열 최댓값 찾기 가장 많이 나온 문자, 숫자 찾기 if (count[i] > max) { max = count[i]; ... }
최댓값 중복 처리 max값 중복이면 ? 출력 else if (count[i] == max) result = '?';
문자 인덱스 → 문자로 변환 숫자 → 알파벳 문자 (char)(i + 'a') 또는 (char)(i + 'A')
문자 → 숫자 문자형 숫자를 정수로 변환 int num = ch - '0';
문자열 공백으로 나누기 단어 분리 등 split 사용 String[] words = str.split(" ");
배열 출력 알파벳 개수 전부 출력 System.out.print(count[i] + " ");