[백준] 10820번 문자열 분석 JAVA (자바) 풀이
문제 10820번
: 문자열 N개가 주어진다.
이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성
[입력]
: 첫째 줄부터 N번째 줄까지 문자열이 주어진다
[출력]
: 첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력
[코드]
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = "";
while((s=br.readLine())!=null){
int arr[] = new int[4];
for(int i = 0; i<s.length();i++){
char c = s.charAt(i);
if('a'<=c && c<='z'){
arr[0]++;
}
else if('A'<=c && c<='Z'){
arr[1]++;
}
else if('0'<=c && c<='9'){
arr[2]++;
}
else{
arr[3]++;
}
}
System.out.println(arr[0]+" "+arr[1]+" "+arr[2]+" "+arr[3]);
}
}
}
[해설]
: String s = ""; s 입력값 비어있게 설정
: while((s=br.readLine())!=null){ s가 null이 아닐 때까지 반복
: int arr[] = new int[4]; 매 반복마다 배열이 누적되는 것이 아니라 입력 한 줄 당 서로 다른 출력이 나와야함
while문 안에 넣어주어 반복할 때마다 초기화한다
: for(int i = 0; i<s.length();i++){
char c = s.charAt(i); 문자 하나하나 뜯어보기
if('a'<=c && c<='z'){ 소문자일 때 배열 첫번째 자리에 count
arr[0]++;
}
else if('A'<=c && c<='Z'){ 대문자일 때 배열 두번째 자리에 count
arr[1]++;
}
else if('1'<=c && c<='9'){ 숫자일 때 배열 세번째 자리에 count
arr[2]++;
}
else{ 공백 문자일 때 배열 네번째 자리에 count
arr[3]++;
}
}
[팁]
: 문자열 N개가 주어진다고 했지만 입력에 N은 없다
코드가 계속 돌기만 하고 언제 끝나야 할 지 모르는 것
EOF 를 알고 있다면 단번에 풀리는 문제이다
EOF란 더이상 읽을 수 있는 데이터가 없음을 나타낸다
String input = "";
while((input = br.readLine()) != null) {
// code here...
}
위와 같이 String형 변수를 빈문자열로 선언하고 while문에서 입력과 null이 맞는지 비교
이제 풀어보러 갈께요 :)
https://www.acmicpc.net/problem/10820
10820번: 문자열 분석
문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있
www.acmicpc.net
* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *