10820번: 문자열 분석

문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있

www.acmicpc.net

 

더보기

그냥 제출했더니 NullPointerError가 떴다

찾아본 결과 이 문제가 의도한 것은 EOF 인 것 같다.

End Of File 

입력의 끝이 어디인지 주어지지 않는다.

그 끝을 판단하는 것을 코드로 짤 수 있는지 묻는 문제다.

문제 간단설명)

입력받은 문자열에서 소문자, 대문자, 숫자, 공백 개수 구하기

+EOF (End Of File)

 

풀이)

소문자, 대문자, 숫자, 공백 개수가 들어갈 정수 배열을 만든다.

각 상황에 맞게 배열 값을 +1 한다.

이 문제의 핵심은 입력이 끝인지 아닌지를 판단하는 것이다.

readLine()은 더 이상의 입력 값이 없다면 null값을 반환하는데,

이를 이용한다.

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
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));
        String input;
        while((input = br.readLine()) != null){
            int[] cnt = new int[4];
 
            for (int i = 0; i < input.length(); i++) {
                char ch = input.charAt(i);
                if('a' <= ch && ch <= 'z') cnt[0]++;
                else if('A' <= ch && ch <= 'Z') cnt[1]++;
                else if('0' <= ch && ch <= '9') cnt[2]++;
                else if(ch == ' ') cnt[3]++;
            }
 
            for (int i : cnt) {
                bw.write(i + " ");
            }
            bw.write("\n");
            bw.flush();
        }
        bw.close();
    }
}
 
 
cs

+ Recent posts