TIL(Today I Learned)

99클럽 코테 스터디 2일차 TIL + [백준] 10820 : 문자열 분석

zincah 2025. 4. 1. 23:12
반응형

오늘의 학습 키워드

  • 문자열
  • 비교
  • 입력 방식

 

문제 탐색하기

문제

 

문제 풀이 설계하기

입력받은 문자열을 단어 하나씩 조건에 맞는지 비교하면 되는 문제입니다. 단어가 알파벳 소문자, 대문자, 숫자, 공백 중 하나임을 조건을 통해서 확인하고 각 조건일때 카운트를 증가시키는 로직을 구현해서 최종적으로 입력받은 문자열에 대해 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분하여 출력해주면 됩니다.

 

이때 문자열의 갯수인 N이 주어지지 않는 다는 것도 유의해야하는데 

String input;
while((input = br.readLine()) != null){

 

위 코드 처럼 작성하게되면 입력이 종료되었을때 이 while-loop가 종료된다고 합니다.

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringBuilder sb = new StringBuilder();
        String input;
        while((input = br.readLine()) != null){
            int[] arr = new int[4];
            for(int i=0; i<input.length(); i++){
                char ch = input.charAt(i);
                if(ch == ' '){
                    arr[3]++;
                }else if(ch >= 48 && ch < 58){
                    arr[2]++;
                }else if(ch >= 65 && ch < 91){
                    arr[1]++;
                }else if(ch >= 97 && ch < 123){
                    arr[0]++;
                }
            }
            sb.append(arr[0]).append(" ").append(arr[1]).append(" ").append(arr[2]).append(" ").append(arr[3]).append("\n");
        }

        System.out.println(sb.toString());
    }
}

 

 

오늘의 회고

br.readLine() == null 이라는 것이 더이상 입력을 하지 않았을 때를 검증할 수 있다는 것을 알 수 있는 문제라서 좋았습니다.
char 자료형을 Ascii 코드를 활용하면 소문자, 대문자 등을 숫자로 비교할 수 있어서 그렇게 문제를 풀었는데 
isUpperCase(), isLowerCase(), isDigit()라는 조건을 통해서 문제를 풀 수 있다는 것도 알게되었습니다.
반응형