https://school.programmers.co.kr/learn/courses/30/lessons/62048
- 직사각형의 대각선이 가로지르는 사각형들은 일정한 패턴이 반복된다.
이 패턴이 반복되는 횟수가 가로 세로의 GCD
-> GCD(12, 8) = 4
- 이 패턴의 가로 세로 길이가 각각 w / gcd, h / gcd 이다.
-> 8 / 4 = 2, 12 / 4 = 3
- 대각선이 지나는 칸은 한줄에 1칸 ~ 2칸 존재할 수 있다.
- 대각선이므로 세로줄기준 최소 1칸은 차지할수 밖에 없다.
-> h / gcd = 12 / 4 = 3
- 하지만 가로줄기준 2칸을 차지하는 경우는 w/gcd -1 이다.
-> w / gcd - 1 = 8 / 4 -1 = 2 - 1 = 1
=> 최종식
- w * h - [ { ( w / gcd ) + ( h / gcd ) - 1 } * gcd ]
- w * h - ( w + h - gcd )
const gcd = (a, b) => b ? gcd(b, a % b) : a;
function solution(w, h) {
return w * h - (w + h - gcd(w, h));
}
'Coding Test > Programmers' 카테고리의 다른 글
[Programmers] Lv 2. 무인도 여행 (0) | 2023.03.28 |
---|---|
[Programmers] (2020 KAKAO BLIND RECRUITMENT) Lv 2. 문자열 압축 (0) | 2023.03.26 |
[Programmers] (2021 카카오 채용연계형 인턴십) Lv 2. 거리두기 확인하기 (1) | 2023.03.23 |
[Programmers] Lv 2. 가장 큰 정사각형 찾기 (0) | 2023.03.20 |
[Programmers] (완전탐색) Lv 2. 전력망을 둘로 나누기 (0) | 2023.03.17 |
댓글