https://www.acmicpc.net/problem/10820
1. 아이디어
문자열에 포함된 소문자, 대문자, 숫자, 공백을 구분해서 개수를 구해야 하는데 이때 각각의 아스키 코드로 구분할 수 있는 점을 활용했다.
2. 문제풀이
아스키 코드 문자의 개수를 세는 카운팅 배열을 활용해서 각 문자의 개수를 전부 세고 이후 해당 범위의 개수의 합을 구하는 방식으로 구현했다.
카운팅 배열을 그냥 소문자, 대문자, 숫자, 공백 이렇게 4가지만 셀 수 있게 만들고 카운팅 배열에 넣을 때 조건을 걸어서 해결할 수도 있는데 이 방식이 가독성이 더 좋을 것 같았다.
3. 코드
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
String str;
while ((str = br.readLine()) != null) {
char[] input = str.toCharArray();
int[] cntArr = new int[128];
for (char c : input) {
cntArr[c]++;
}
sb.append(sum(cntArr, 'a', 'z')).append(" ")
.append(sum(cntArr, 'A', 'Z')).append(" ")
.append(sum(cntArr, '0', '9')).append(" ")
.append(sum(cntArr, ' ', ' ')).append("\n");
}
bw.write(sb.toString());
bw.flush();
}
// 카운팅 배열의 구간합
private static int sum(int[] arr, int start, int end) {
int sum = 0;
for (int i = start; i <= end; i++) {
sum += arr[i];
}
return sum;
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 1541번 - 잃어버린 괄호 [Java] (0) | 2024.12.02 |
---|---|
[백준] 10430번 - 나머지 [Java] (1) | 2024.12.02 |
[백준] 11399번 - ATM [Java] (0) | 2024.12.02 |
[백준] 1026번 - 보물 [Java] (0) | 2024.12.02 |
[백준] 11047번 - 동전 0 [Java] (0) | 2024.12.02 |