이 문제는 입력한 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 출력하는 문제이다.
문자열은 소문자, 대문자, 숫자, 공백으로만 이루어져 있어 따로 예외처리를 하지 않아도 되기 때문에 난이도는 쉬웠다.
풀이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 |