Uknow's Lab.
article thumbnail

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

 

10820번: 문자열 분석

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

www.acmicpc.net

 

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

 

1. 설명

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

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

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

 

 

2. 소스코드

 

<code />
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 } } }

 

 

<code />
val br = BufferedReader(InputStreamReader(System.`in`))

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

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

 

 

<code />
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()도 있습니다.

 

 

<kotlin />
try { . . . (중략) } catch (e: Exception) { break }

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

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

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

 

 

 

3. 후기

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

profile

Uknow's Lab.

@유노 Uknow

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