백준 10820 문자열 분석 (JAVA)

문제 링크 🔗

 

이 문제는 입력한 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 출력하는 문제이다.

문자열은 소문자, 대문자, 숫자, 공백으로만 이루어져 있어 따로 예외처리를 하지 않아도 되기 때문에 난이도는 쉬웠다.

 

풀이1

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();

String str = br.readLine();
while (str != null) {
    int lower_cnt = 0;
    int upper_cnt = 0;
    int digit_cnt = 0;
    int blank_cnt = 0;

    for(int i = 0; i < str.length(); i++){
        char c = str.charAt(i);
        if(c >= 'a' && c <= 'z')
            lower_cnt++;
        else if (c >=  'A' && c <= 'Z')
            upper_cnt++;
        else if (c >= '0' && c <= '9')
            digit_cnt++;
        else
            blank_cnt++;
    }

    System.out.println(lower_cnt + " " + upper_cnt + " " + digit_cnt + " " + blank_cnt);
    str = br.readLine(); // 안하면 무한루프
}

 

문자열을 입력받을 때마다 결과가 출력되도록 했다. (반복)

반복문으로 문자열을 순회하며 문자를 분류하고 카운트 값을 증가시켰다.

이 코드는 물론 정답이지만, 해설을 보고 나니 여러가지 개선할 필요를 느꼈다. 

 

- 기본 for문 -> 향상된 for문(for each)

: 문자열(배열)의 문자를 순회하므로 for each 사용하면 더 직관적이고 깔끔해진다.

- 기본 출력 -> 포맷 사용

: 특정 패턴을 가진 문자열을 출력하므로 포맷 사용하기

- Character 클래스 활용

 

풀이2

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();

String str = br.readLine();
while (str != null) {
    int lower_cnt = 0;
    int upper_cnt = 0;
    int digit_cnt = 0;
    int blank_cnt = 0;

    for (char c : str.toCharArray()) {
        // Character Class method 활용
        if (Character.isLowerCase(c))
            lower_cnt++;
        else if (Character.isUpperCase(c))
            upper_cnt++;
        else if (Character.isDigit(c))
            digit_cnt++;
        else
            blank_cnt++;
    }
    System.out.printf("%d %d %d %d%n", lower_cnt, upper_cnt, digit_cnt, blank_cnt);
    str = br.readLine();
}

 

결과

'TIL > Algorithm' 카테고리의 다른 글

leetcode 70 Climbing Stairs (JAVA)  (2) 2025.08.11
백준 1032 명령 프롬포트 (JAVA)  (2) 2025.08.04