https://www.acmicpc.net/problem/10820
난이도 : 브론즈 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를 사용하여 반복문을 탈출하는 걸 잘 생각하지 못해 좀 헤맸던 것 같습니다.
'코딩테스트 > Kotlin' 카테고리의 다른 글
[백준 7576번] [Kotlin] 토마토 (0) | 2022.06.22 |
---|---|
[백준 2178번][Kotlin] 미로 탐색 (0) | 2022.06.19 |
[백준 1436번] [Kotlin] 1로 만들기 (0) | 2022.06.19 |
[백준 10866번][Kotlin] 덱 (0) | 2022.06.18 |
[백준 2606번] [Kotlin] 바이러스 (0) | 2022.06.18 |