class Solution {
public long solution(long w, long h) {
return w * h - (w + h - gcd(w, h));
}
private long gcd(long w, long h) {
if (w % h == 0)
return h;
return gcd(h, w % h);
}
}
방법을 찾지 못해 다른 분들의 풀이를 참고하여 풀었습니다. 패턴을 찾아보니, 최대공약수를 이용하는 것 같은데, 정확하게 이해가 안되네요😥
그러다가 다른 풀이를 발견하였는데, 위의 방법보다 더 직관적으로 이해가 가능했습니다.
class Solution {
public long solution(long w, long h) {
long result = 0L;
for (int i = 1; i < w; i++) {
result += h * i / w;
}
return result * 2;
}
}
일차함수 방정식으로 생각한 풀이였는데요, 직관적인 이해가 가능했습니다.
그림의 경우, 로 표현됩니다. x에 1부터 w - 1까지 대입하여 정수 부분만 누적한뒤, 대칭이므로 2를 곱해주면 정답이 됩니다.