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

Junyoung Park·2022년 5월 31일
0

코딩테스트

목록 보기
451/631
post-thumbnail

1. 문제 설명

멀쩡한 사각형

2. 문제 분석

직각 삼각형의 빗변이 전체 사각형과 마주칠 수 있는 최대의 경우를 먼저 뺀다. 이후 공통적인 부분은 다시 더해주는 게 포인트.

  • 빗변이 마주치는 최대의 경우는 위쪽으로 카운트할 때 w, 옆쪽으로 카운트할 때 w. 이중 공통되는 부분은 최대공약수라는 뜻. 사실 “빼야하는 수"를 구하기까지는 오래 걸리지 않았지만 왜 예시 문제에서 20이 아니라 16을 빼주어 답이 80이 나오기까지, 즉 -20 이후 더해주는 수가 왜 4여야 하는지는, 다른 사각형을 그려보면서 최대공약수 같다는 생각으로 얻었던 것 같다.
  • 사실 원리적인 이해보다도 직사각형을 그린 뒤 대각선이 어떻게 지나가는지 하나씩 그려보면서 귀납적으로 접근했다. 직사각형보다 정사각형으로 이해하는 게 더 와닿았던 문제… 왜 수학을 하고 있는 건지.

3. 나의 풀이

import Foundation

func solution(_ w:Int, _ h:Int) -> Int64{
    var answer:Int64 = 0
    let w = Int64(w)
    let h = Int64(h)
    
    func getGCD(A:Int64, B: Int64) -> Int64{
        if B == 0 {
            return A
        } else {
            return getGCD(A: B, B: A % B)
        }
    }
    
    answer = w * h - (w + h) - getGCD(A: w, B: h)
    return answer
}
profile
JUST DO IT

0개의 댓글