Uknow's Lab.
article thumbnail

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

 

10820번: 문자열 분석

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

www.acmicpc.net

 

난이도 : 브론즈 2
태그 : 구현, 문자열

 

설명

간단한 문자열 분석 문제입니다.

공백인지, 대문자인지, 소문자인지, 숫자인지 구해야 하는데,

코틀린에선 문자열 체크 메소드를 자체적으로 지원하기에 꽤 간단하게 풀 수 있습니다.

 

 

소스코드

 

import java.io.BufferedReader
import java.io.InputStreamReader

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    while (true) {
        try {
            val line = br.readLine()

            var upper = 0
            var lower = 0
            var space = 0
            var num = 0

            for (i in line.indices) {
                val char = line[i]

                if (char == ' ') {
                    space++
                } else if (char.isDigit()) {
                    num++
                } else if (char.isLowerCase()) {
                    lower++
                } else {
                    upper++
                }
            }
            println("$lower $upper $num $space")
        } catch (e: Exception) {
            break
        }
    }
}

 

 

val br = BufferedReader(InputStreamReader(System.`in`))

BufferedReader를 이용하여 문자열을 입력받습니다.

코틀린 자체의 readLine() 보다 빠르게 입력받을 수 있기 때문입니다.

 

 

val line = br.readLine()

var upper = 0
var lower = 0
var space = 0
var num = 0

for (i in line.indices) {
    val char = line[i]

    if (char == ' ') {
        space++
    } else if (char.isDigit()) {
        num++
    } else if (char.isLowerCase()) {
        lower++
    } else {
        upper++
    }
}

 

각 케이스에 대해 변수를 선언하고, 해당 값에 따라 +1씩 올려줍니다.

 

공백의 경우 char == ' ' 로 비교할 수 있습니다.

 

(char).isDigit는 해당 char형이 숫자인지 확인하는 메소드이며,

 

(char).isLowerCase()는 해당 char형이 소문자인지를 확인하는 메소드입니다.

 

위 소스코드에선 나와있지 않지만 대문자인지 확인하는 (char).isUpperCase()도 있습니다.

 

 

try {
    .
    .
    .
    (중략)
} catch (e: Exception) {
    break
}

해당 문제에서는 총 케이스가 몇개인지 주어지지 않습니다.

따라서 while(true)로 하여, 런타임 에러를 일으키는 케이스가 들어왔을때

try - catch 문으로 반복문을 감싸 에러 발생 시 프로그램이 강제종료 되지 않게 하며, 반복문을 탈출합니다.

 

 

 

후기

문제 자체는 쉬웠으나, try - catch를 사용하여 반복문을 탈출하는 걸 잘 생각하지 못해 좀 헤맸던 것 같습니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.