유니 코드

[BOJ/백준][Bronze II] 10820: 문자열 분석 (Kotlin) 본문

알고리즘/미분류

[BOJ/백준][Bronze II] 10820: 문자열 분석 (Kotlin)

꼬물쥰 2022. 3. 2. 15:02

https://www.acmicpc.net/problem/10820

 

10820번: 문자열 분석

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

www.acmicpc.net

 

문제

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

각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다.


입력

첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다.


출력

첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다.


예제 입력1

This is String
SPACE    1    SPACE
 S a M p L e I n P u T     
0L1A2S3T4L5I6N7E8

예제 출력1

10 2 0 2
0 10 1 8
5 6 0 16
0 8 9 0

풀이 

import java.util.*
import kotlin.math.*

fun main(){
    
    while(true){
        val input = readLine() ?: return
        val result = IntArray(4,{0})
                
        input.forEach{ it ->
            when(it){
                in 'a'..'z' -> result[0]++
                in 'A'..'Z' -> result[1]++
                in '0'..'9' -> result[2]++
                ' ' -> result[3]++
            }
        }

        for(i in 0..3){
            print(result[i].toString() + " ")
        }
        println()
    }
}

한 줄씩 입력받아서 forEach를 사용하여 문자 하나씩 세고, 0으로 초기화한 배열을 증가시켰다.

대문자, 소문자, 공백, 숫자를 구분하는 것은 아스키 코드를 이용하였다. 

forEach안에 조건문을 사용했는데 when 문을 이용하니까 좀 더 깔끔해졌다.

 

Comments