반응형

N개 줄의 문자열을 입력받아서 각 줄마다 소문자, 대문자, 공백, 숫자의 개수를 출력하는 문제다.
사실 크게 어렵지는 않은… 그것도 심지어 브론즈 문제인데 꽤나 헤맸다.
왜냐하면 난 BufferedReader으로는 EOF를 처리해본 적이 없거든…
그래서 찾아본 결과 while문의 조건으로 br.readLine()을 넣어준 후 다음 줄의 문자열이 존재할 경우 계속 돌리다가 더 이상 입력받을 줄이 없다면 null이 들어오므로 그 때 반복을 중지하는 형태였다.
그 외에는 뭐… ASCII코드로 공백, 소문자, 대문자, 숫자를 각각 구분해서 배열에 문자를 만날 때마다 각 빈도 수를 하나씩 늘려가는 형태로 쉽게 짤 수 있을 듯?
import java.io.*;
public class AnalyzeString_10820 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String str;
while ((str = br.readLine()) != null) { // EOF 처리를 위해 줄이 비어있으면 반복을 멈추도록 한다
sb.setLength(0); // StringBuilder 초기화
int[] n_list = {0, 0, 0, 0}; // 줄 마다 개수를 세야 하므로 빈도 수 초기화
for (int i=0; i<str.length(); i++) {
int c_num = (int)str.charAt(i);
if (c_num == (int)' ') { // 공백일 경우
n_list[3]++;
continue;
} else if ((int)'A' <= c_num && c_num <= (int)'Z') { // 대문자일 경우
n_list[1]++;
continue;
} else if ((int)'a' <= c_num && c_num <= (int)'z') { // 소문자일 경우
n_list[0]++;
continue;
} else {
n_list[2]++; // 숫자일 경우
continue;
}
}
for (int i=0; i<n_list.length; i++) {
sb.append(Integer.toString(n_list[i]));
sb.append(" ");
}
System.out.println(sb);
}
}
}
로그인
www.acmicpc.net
작성일자: 2023-09-05
'컴퓨터 공학 > 백준' 카테고리의 다른 글
[백준] JAVA 자바 : 네 수 (10824번) (0) | 2024.01.21 |
---|---|
[백준] JAVA 자바 : ROT13 (11655번) (0) | 2024.01.20 |
[백준] JAVA 자바 : 알파벳 찾기 (10809번) (0) | 2024.01.20 |
[백준] JAVA 자바 : 알파벳 개수 (10808번) (0) | 2024.01.20 |
[백준] JAVA 자바 : 후위 표기식 (1918번) (0) | 2024.01.20 |