티스토리 뷰

코딩테스트

Lv.0 swift 자릿수 더하기

알롱도담쓰 2024. 3. 18. 17:02

문제 설명

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

 

제한 조건

0 ≤ n ≤ 1,000,000

 

내 답안

func solution(_ n:Int) -> Int { 
    return Array(String(n)).compactMap { Int(String($0)) }.reduce(0, +)
}

 

접근 방법

  1. 정수 n을 문자열 "n"으로 변환
  2. 문자열 "n"을 배여로 전환 -> ["", "", ""]
  3. compactMap를 사용해 각각을 문자열에서 정수로 변환
  4. reduce를 써서 정수로 바뀐 각 숫자들을 더해주기

 

다른 풀이

lution(_ n: Int) -> Int {
    var mutableN = n
    var answer = 0

    while mutableN > 0 {
    	// 10으로 나눈 나머지는 가장 오른쪽 자리 숫자가 된다
        // 123 이면 3
        answer += mutableN % 10
        
        // 오른쪽 자리 숫자를 제거하기 위해서 10으로 나눠준다
        // mutableN은 정수기 때문에 소수점 아래 숫자는 삭제하기 때문이다
        mutableN /= 10
    }
    return answer
}

 

문자열로 형변환하지 않고 수학적 연산으로 푸는 방법

 

func solution(_ n:Int) -> Int {
    var array = Array(String(n))
    return array.reduce(0) { Int(String($0))! + Int(String($1))!}
}
func solution(_ n:Int) -> Int {
    return String(n).reduce(0){$0 + Int(String($1))!}
}

 

나랑 비슷한 방식인 거 같은데 순서가 달라서 기록해 둠

특히 첫 번째와 두 번째는 방식이 거의 똑같은데, 두 번째는 $0 (누적값)의 경우 형변환을 하지 않않다

0부터 시작해 정수로 변한 $1(배열의 요소) 를 저장하고 있기 때문에 $0은 형변환 하지 않아도 된다 

 

알게 된 것

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

Lv.0 swift 모음 제거  (0) 2024.03.18
Lv.0 Swift 문자 반복 출력하기  (0) 2024.03.18
Lv.0 Swift 점의 위치 구하기  (0) 2024.03.18
Lv.0 swift 세균 증식  (0) 2024.03.17
Lv.0 swift 짝수의 합  (0) 2024.03.17
최근에 올라온 글