개발자의 생활

숫자의 합(11720) [Kotlin] 본문

코딩테스트/백준

숫자의 합(11720) [Kotlin]

Developer성현 2025. 11. 28. 16:45

 

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

문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백 없이 주어진다.

 

출력

입력으로 주어진 숫자 N개의 합을 출력한다.

 


이 문제는 첫 번째 줄에 숫자의 개수가 입력된다고 했습니다. 만약 배열을 사용한다면 이 값을 사용해서 크기를 지정할 수 있습니다.

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

reader.readLine()
val strNum = reader.readLine()

하지만 Koltin을 사용하면 배열을 사용하지 않아도 됩니다. 그러니 첫 번째 줄은 그냥 넘기면 됩니다.

 

이다음 숫자를 문자열로 공백 없이 받는다고 했습니다. 이를 하나씩 잘라서 정수로 만들고 더하기만 하면 됩니다.

이는 다양한 방법이 존재합니다. 모든 방법을 다룰 순 없으니 몇 가지만 사용해 보겠습니다.

 

1. 반복문 for 사용하기

var arrNumberAdd = 0
for (num in strNum){
    arrNumberAdd += num.digitToInt()
}

 

이렇게 문자열을 반복문으로 문자 단위로 가져올 수 있습니다. 그리고 가져오는 동시에 정수로 변경하면 됩니다.

 

여기서 문자를 정수로 변경하는 함수로 digitToInt()를 사용하였습니다. 이것 말고도 toInt()라는 함수도 존재합니다.

이름만 보면 두 개 다 정수로 변환하는 함수로 보이지만 큰 차이점이 있습니다.

 

digitToInt() 은 문자를 정수로 변경할 수 있는지 확인을 한 후 변환이 가능하면 정수로 변환 수 반환해 줍니다.

그리고 정수로 변환할 수 없는 문자라면 예외를 발생시킵니다.

추가로 digitToIntOrNull()이라는 함수도 존재합니다. 이는 동일한 역할을 하지만 정수로 변환을 못하는 값이라면 null을 반환합니다.

 

toInt()는 문자를 유니코드 형태로 반환을 해 줍니다.

 

이 문제에서는 문자열이 정수로만 나온다고 하였으니 digitToInt()을 사용하면 됩니다.

 

2. 컬렉션 함수, 집계함수 사용하기

var arrNumberAdd = 0
strNum.forEach {
    arrNumberAdd += it.digitToInt()
}
val arrNumberAdd = strNum.map { it.digitToInt() }.sum()

여기서는 map {} 컬렉션 함수를 사용하여 문자열을 각각의 문자로 나눈 후 정수로 변환하여 List 형태로 만든 뒤 이를 sum() 집계함수로 모든 요소를 더하였습니다.

val arrNumberAdd = strNum.sumOf { it - '0' }

 

이 코드는 sumOf {}를 사용하였습니다. 이는 문자열을 문자로 변환한 후 문자 '0'을 뺀 모든 요소를 더하고 있습니다.


이 방법들 말고도 수많은 방법들이 있겠지만 여기서는 이 정도만 해보겠습니다.

 

감사합니다.

'코딩테스트 > 백준' 카테고리의 다른 글

평균(1546) [Kotlin]  (0) 2025.12.03