728x90
반응형
문) 문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다.
입) 첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다.
출) 첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다.
풀이
이걸 쓰게 된 이유가 있다.
풀이는 매우 단순하므로 금방 작성했으나 <런타임 에러(Nullpointer)>에서 계속 걸리는 것이다.
무려 3번이나...^^.
패인은 null과 빈 문자열일 때의 경우, 둘 다 처리해야했는데 못한 것이다.
1~3회 모두 null이 아닌 경우만 != 연산자와 equals()함수를 사용해서 처리했음.
진짜 못 찾겠어서 질문 게시판을 뒤져봐도 안 나와서 챗 지피티한테 물었다. 흑흑.
<null이 아닌 동안 + 빈 문자열이 아닌 동안>에 루프가 돌아가게 해야 정상적으로 출력된다는 답변을 받았다.
코드
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 n;
while((n = br.readLine()) != null && !n.isEmpty()) {
int small = 0, big = 0, num = 0, blank = 0;
for(int i=0; i<n.length(); i++) {
char c = n.charAt(i);
if(c >= 'a' && c <= 'z') small++;
else if(c >= 'A' && c <= 'Z') big++;
else if(c >='0' && c <= '9') num++;
else blank++;
}
bw.write(small + " " + big + " " + num + " " + blank+"\n");
}
br.close();
bw.flush();
bw.close();
}
}
여러 경우의 수를 잘 살펴보자는 교훈을 얻었다. 하하.
'알고리즘' 카테고리의 다른 글
[백준] DP - 2579번, 계단 오르기 (다른 풀이 도움) (0) | 2023.10.27 |
---|---|
[백준] DP - 1912번, 연속합 (0) | 2023.10.25 |
[백준] DP - 11054번, 가장 긴 바이토닉 부분 수열 (다른 풀이 봄) (1) | 2023.10.23 |
[백준] 큐 - 18258번 (1) | 2023.10.18 |
[백준] DP - 11722번, 가장 긴 감소하는 부분 수열 (0) | 2023.10.18 |