요깨비's LAB

[프로그래머스, Kotlin] 멀쩡한 사각형 본문

알고리즘(Kotlin)/Simulation

[프로그래머스, Kotlin] 멀쩡한 사각형

요깨비 2021. 3. 25. 18:09

 

class Solution {
    fun solution(w: Int, h: Int): Long {
        var answer: Long = 0
        var w = w.toLong()
        var h = h.toLong()
        val gcd = getGcd(w,h)
        answer = ((w*h) - (w+h-gcd))

        return answer
    }

    fun getGcd(num1: Long, num2: Long):Long {
        var n1: Long
        var n2: Long
        var gcd:Long = 1
        if(num1 >= num2) {
            n1 = num1
            n2 = num2
        } else {
            n1 = num2
            n2 = num1
        }

        for(i in 1..n2) {
            if(n1 % i == 0.toLong() && n2 % i == 0.toLong()) {
                gcd = i
            }
        }

        return gcd
    }
}

해당 아이디어는 어릴때 수학문제중에 비슷한 문제를 본 기억이 있어서 (가로 + 세로 - 최대공약수)의 개념으로 풀었습니다.
제한사항을 유심히 봐야합니다. W,H가 1억 이하의 자연수이므로, 멀쩡한 사각형의 개수를 알기위해서는 
전체 사각형 개수 - (손상된 사각형)으로 풀었는데, 1억 * 1억은 Int의 범위를 초과하므로 채점 중간의 오답처리가 됩니다.

따라서 중간에 캐스팅하지 않고 아예 입력 받은 가로 세로를 Long으로 변환하여 처리하였습니다.

Comments