ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 짝수의 합, 배열의 평균 값
    iOS 앱 개발 부트캠프/TIL 2024. 11. 2. 22:35

    짝수의 합

    문제 : 정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

    1. 짝수의 합을 저장할 evenNumber 변수 선언한 뒤 초기값을 0으로 설정하기
    2. for문과 범위연산자로 1...n으로 1부터 n까지 정수 반복하기
    3. if문의 조건 n % 2 == 0로 짝수를 거른 뒤 evenNumber에 더하기
    import Foundation
    
    var evenNumber = 0
    
    func solution(_ n:Int) -> Int {
        for i in 1...n{
            if i % 2 == 0 {
                evenNumber += i
            }
        }
        return evenNumber
    }

     


    배열의 평균값

    문제 : 정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.

    1. 원소 값을 전부 합칠 total 변수 선언한 뒤 0으로 초기화 하기
    2. for문으로 배열의 원소 하나씩 뽑아낸 뒤 total에 값 더하기
    3. 원소 값이 전부 더해진 total을 numbers.count로 나누고 Double로 형변환 하기

    반환할 때 계산 후에 형변환을 하였더니 total / number.count의 값이 Int 타입으로 계산되어 형변환 하기 전에 이미 소수점이 버려져버렸다. 컴파일 에러는 없지만 틀린 로직이 된 것이다.

    로직 수정하기

    import Foundation
    
    let numbers: [Int] = [1, 2, 3, 4, 5, 6, 7, 8 , 9, 10]
    
    func solution(_ numbers:[Int]) -> Double {
        var total: Double = 0
        for number in numbers {
            total += Double(number)
        }
        
        return total / Double(numbers.count)
    }

    형변환의 에러를 없애기 위해 total을 Double 타입으로 지정하고, total에 값을 더할 때 numbers의 원소 값을 Double로 형변환 하여 더하였다.

    이후 결과를 반환할때도 number.count가 Int 타입이기 때문에 Double로 형변환 하여 나누기를 실행하여 오류를 수정하였다.


    다른 방법 생각해보기

    import Foundation
    
    let numbers: [Int] = [1, 2, 3, 4, 5, 6, 7, 8 , 9, 10]
    
    func solution(_ numbers:[Int]) -> Double {
        var total = 0
        for number in numbers {
            total += number
        }
        
        return Double(total) / Double(numbers.count)
    }

    혹은 이런 식으로 Int 타입으로 설정해 총합을 구한 뒤 평균을 구하기 위해 나눌때 total과 number.count를 각각 형변환 하는 방법도 있다.

    전자의 경우 반복문이 작동할 때마다 number를 형변환 해주고 마지막에 numbers.count도 형변환 하기 때문에 배열 원소의 총 개수 n개와 마지막에 numbers.count에서 한 번, 총 n+1번 형변환을 하게 된다. 원소의 개수가 많으면 많을 수록 형변환이 많아지는데 이러면 다소 비효율적일 것이다.

    반면 후자의 경우 마지막에 total과 numbers.count에만 총 2번만 형변환을 하니 좀 더 안정적일 수 있다.

    형변환을 할 땐 어느 시점에 해야 하는지 잘 생각하고 해야한다. 가장 좋은 건 형변환을 할 일이 없도록 타입 지정을 잘 설정하는 것이겠지만, 알고리즘 문제에서처럼 조건으로 입력 값과 반환 값의 타입이 정해져 있는 경우에는 어느 시점에 형변환을 하는 것이 적은 형변환을 하면서도 원하는 결과가 나올 수 있는지 생각해봐야 할 것이다.

Designed by Tistory.