202426 자릿수 더하기

이수진·2024년 4월 26일

https://school.programmers.co.kr/learn/courses/30/lessons/12931
위 문제를 푸는데 의도한 값과 다르게 나와서 확인해보았다.

문제는 숫자의 각 자릿수를 더한 값을 반환하는 문제이다.

입력 : 123
결과 : 6 (= 1 + 2 + 3)

이 문제를 풀기 위해 생각한 흐름은 다음과 같다.
1. 함수에 받아 온 Int 값을 String으로 변환한다
2. String을 문자 하나씩 쪼개어 배열이나 리스트로 만든다
3. forEach로 배열이나 리스트를 순회하여 값을 더한다

  • 처음에 시도한 코드
class Solution {
    fun solution(n: Int): Int {
        var answer = 0
        
        val intString = n.toString()
        val splitList = intString.toList()
        
        splitList.forEach{answer += it.toInt()}
        
        return answer
    }
}

123이 입력되었을때 위 코드의 결과는 150이었다. 왜 이렇게 큰 차이가 나게 되었을까?

String타입에 toList()를 사용하면List<Char> 타입을 반환한다.
그리고 Char타입을 toInt()로 변환하면 ASCII 코드 값으로 변환된다.
따라서, '1' -> 49 로 변하게 된다.

class Solution {
    fun solution(n: Int): Int { // n = 123
        var answer = 0
        
        val intString = n.toString() // intString = "123"
        val split = intString.toList() //split = ['1', '2', '3']
        
        split.forEach{answer += it.toInt()} // answer = 49 + 50 + 51
        
        return answer //150
    }
}
  • 수정한 코드
class Solution {
    fun solution(n: Int): Int {
        var answer = 0
        
        val intString = n.toString()
        val splitList = intString.chunked(1)
        
        splitList.forEach{answer += it.toInt()}
        
        return answer
    }
}

Char타입의 숫자값을 유지하여 Int타입으로 바꾸는 방법들도 있지만 chunked() 메소드를 알게 되어 적용해보았다.

chunked()는 주어진 크기만큼 콜렉션을 나눠 리스트로 만들어주는 메소드이다. String 타입의 경우 주어진 크기만큼 문자열을 잘라 List<String>타입을 반환한다. String타입을 toInt()로 변환할때는 값이 유지되기 때문에 정상적으로 작동했다.

0개의 댓글