본문 바로가기
Baekjoon/[1] 자료구조

[백준] 10820번 문자열 분석 JAVA (자바) 풀이

by Poorm 푸름 2023. 8. 16.

문제 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

 

* 독학으로 익히는 코딩이라 틀린 것이 있을 수 있습니다. 오류가 있다면 댓글을 통해 알려주세요. 감사합니다. *