코틀린/코딩테스트

코딩테스트 [자릿수 더하기]

정혜현 2024. 6. 20. 10:29

문제

정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요


 

풀이

1. 접근

1.1 관찰

자리 숫자의 합을 담는 문제

입력 : 정수

출력 : 정수

 

1.2 계획 

우회하는 방법(배열이나 문자열로 변환하고 더한 뒤 정수로 돌아오는 방법)을 먼저 써보자

 

문자열로 변환하기 : toString()

반복문으로 변환해서 더하기 : 요소 하나씩 검사하니까 Chr형이 될거다. String으로 바꾸고 Int로 바꿔서 담아야겠다.

더해서 answer에 담기 : 더한 값 리턴

 

 

 

2. 시행착오

2.1 시도

 

class Solution {
    fun solution(n: Int): Int {
        var answer: Int = 0
        n.toString()
        for(i in n) {
            answer += i.toString().toInt()
        }
        return answer
    }
}

 

검증결과 : 실패. for문 ()괄호가 잘못됐다는 오류

/Solution.kt:5:19: error: for-loop range must have an 'iterator()' method for (i in n) { ^

 

iterator()
객체의 요소를 순회할 수 있는 메소드. Iterable 타입 인터페이스에 정의되어 있다. 
Iterator 반복자가 Iterable 객체를 돌면서 처리한다. hasNext()메소드로 다음 요소의 존재 여부를 확인해 있으면 next() 메소드로 다음 요소 반환, 없으면 false 반환
대부분의 컬렉션 타입은 Iterable 타입 인터페이스가 구현되어 있다.

 

 

원인분석 : n이 String형으로 변환되지 않았다. 

변환 메소드를 썼는데 왜 바뀌지 않았을까? 입력값 n 자체를 변환시키는 게 아니기 때문이다. 원본과 사본의 출력을 유의해야한다. toString()은 사본을 만들어주는 메소드다.

 

해결방안 : toString()을 괄호 안으로 넣어보자

 

class Solution {
    fun solution(n: Int): Int {
        var answer: Int = 0
        for(i in n.toString()) {
            answer += i.toString().toInt()
        }
        return answer
    }
}

 

검증결과 : 성공

 

 

 

 


회고

 

출력형태를 잘 알아야한다. 원본을 바꿔준다면 입력값이 변경되므로 따로 담을 필요없이 사용할 수 있고 사본을 만들어준다면 따로 담아서 사용해야한다.