알고리즘(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으로 변환하여 처리하였습니다.