TIL231127 D06 sumOf

jericho·2023년 11월 27일

TIL

목록 보기
6/62

한 주의 시작, 월요일이다. 2주차 발제가 있었다. 이제 온보딩 주차도 지났고, 수강 철회 기간이 지나서 학생들 모두 수강 확정이 되었다. 들어올 때는 마음대로였지만 나갈 땐 아닌 몸이 된 것이다. 그리하여 본격적인 코틀린 문법 공부 챕터가 시작되었다. 이번 주 개인과제와 다음 주 팀과제가 기다리고 있다. 또한 챕터마다 팀도 변경된다. 이번 챕터는 2주?일 듯 하다. 코틀린의 장점과 문법 공부의 필요성, 과제 설명, 당부사항 등이 뒤를 이었다.

자릿수 더하기 문제가 있다. 자연수가 주어지면 각 자리를 더한 값을 반환하는 문제다.
보통의 접근은 Int에서 %10과 /10을 사용하며 끝자리를 더해나가는 식이다.
나는 수를 String으로 변환한 뒤 각 자리의 문자를 '0'으로 뺀 값을 더하는 방법을 생각했다.

fun solution(n: Int): Int {
    val s = n.toString()
    var answer = 0
    for (c in s) answer += c.code - 48
    return answer }

문자에 그대로 48 ('0'의 아스키값)을 빼려 했더니 타입 에러가 나기에, 문자의 아스키값을 가져오는 c.code를 이용해 계산했다.

여기에서 좀 더 개선할 여지가 있었다. 나중에 sumOf라는 함수를 알게 되었다. 배열이나 리스트를 단순히 더하는 sum에서 나아가, 람다식?의 형태로 원하는 값을 더할 수 있는 함수다.

fun solution(n: Int): Int =
    n.toString().sumOf { it - '0' }

완성형이다. 처음엔 toString 후에 toCharArray도 해주었는데 sumOf는 String도 문제없이 받아먹었다. 그리고 문자에서 숫자를 빼는 것이 아니라, 문자를 빼면 Int로 반환이 된다는 것을 알았다.

0개의 댓글