[코딜리티] 레슨 3 - FrogJmp (Swift)

devapploper·2024년 8월 11일

풀이 1

public func solution(_ X : Int, _ Y : Int, _ D : Int) -> Int {
	Int( ceil( Double(Y - X) / Double(D) ) )
}

Double형으로 타입 변환후 소수점 계산을 통해 거리 이동을 위한 최소 횟수를 구하고, ceil을 이용하여 올림 후 반환을 위해 Int형으로 다시 변환한다.

풀이 2

public func solution(_ X : Int, _ Y : Int, _ D : Int) -> Int {
    var result = (Y - X) / D
    
    if (Y - X) % D != 0 {
        result += 1
    }

    return result
}

기본적으로 같은 원리지만 Double 형으로 타입 변환을 사용하지 않는 방법이다. Int로 소수점이 나올 시 나머지가 0으로 떨어지지 않으면 나눴을 때 소수점 자리가 생략되면서 내림이 되기 때문에 1을 더해준다.

Double형은 Int형보다 더욱 자세하게 숫자를 표현할 때 사용되고, 당연히 메모리에 적재될 때 사이즈가 클줄 알았으나.. 혹시 몰라서 검색해보니 Int와 Double은 둘다 64비트로 크기가 같다.

가독성은 풀이 1이 더 좋은 것 같다.
시간복잡도는 풀이 1이 더 나은 것 같다. 나누기 연산을 풀이 2에서는 result 선언과 if문에서 총 두번하고 풀이 1에서는 한번하니까.
공간복잡도는 풀이 1이 더 낫다고 생각한다. 풀이 2에서는 result 변수를 선언한다. 풀이 1은 메서드 내에서 별도로 선언하는 변수가 없다.

profile
iOS, 알고리즘, 컴퓨터공학에 관련 포스트를 정리해봅니다

0개의 댓글