문제 : https://www.acmicpc.net/problem/10820

풀이 방법


처음에 문제를 보고 까다로운 것인지 귀찮은 것인지 이상한 감정이 들었습니다…;; 하지만, 집중해서 풀어보려고 하니까 그렇게 까다로운 문제가 아니었습니다. 쉬운 문제였습니다… ㅎㅎㅎ

이 문제의 핵심은 입력받은 문자열에서 각 문자에 접근할 수 있느냐가 관건인 것 같습니다. 입력받은 문자를 담는 변수를 word라고 한다면 word.charAt(int index)를 아느냐 모르느냐가 이 문제를 해결할 수 있느냐 없느냐를 판가름 할 것 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.io.*;
import java.util.Scanner;

public class BOJ10820 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int smallAlphabet = 0;
int bigAlphabet = 0;
int number = 0;
int space = 0;

while (true) {
// BufferedReader를 이용한 EOF까지 입력받기

String word = bf.readLine();
if (word == null) break;

smallAlphabet = 0;
bigAlphabet = 0;
number = 0;
space = 0;

for (int i = 0; i < word.length(); i++) {
if (word.charAt(i) == ' ')
space++;
else if (word.charAt(i) >= 65 && word.charAt(i) <= 90)
bigAlphabet++;
else if (word.charAt(i) >= 97 && word.charAt(i) <= 122)
smallAlphabet++;
else if (word.charAt(i) >= 48 && word.charAt(i) <= 57)
number++;

}
bw.write(smallAlphabet + " " + bigAlphabet + " " + number + " " + space + "\n");

}
bw.flush();
bw.close();
bf.close();
}
}

배운 점


BufferedReader이나 BufferedWriter를 사용하면 사용을 하지 않는 시점에서 메모리에서 비워줘야 합니다. 이러한 동작을 마지막 줄에서 하는데 실행 창에서는 결과를 확인할 수 없지만, 제출했을 경우에는 답이 나오는 것을 확인할 수 있었습니다… 이 부분 좀 이해가 안가지만, 나중에 찾아봐야 할 것 같습니다.