(12 x 8)
의 사각형에서 잘려나간 도형들은 모양을 반복하고 있는데 이 모양이 몇 번 반복되었는지 확인해본다
(3 X 2)
의 사각형이 총 4번
반복됨을 알 수 있다12와 8의 최대공약수 4
로 각 값을 나누면 3,2
가 된다는 사실을 알 수 있다.w*h-1
개 이다여기서 최대공약수를 구하기 위해 유클리드 호제법을 이용한다
📍Euclidean algorithm
(참고: 위키피디아)
- 2개의 자연수 a,b에 대해서 a를 b로 나눈 나머지를 r이라고 한다 (a>b)
- a와 b의 최대 공약수는 b와 r의 최대공약수와 같다
- 이 성질에 따라 b를 r로 나눈 나머지 r'를 구하고 다시 r을 r'로 나누는 과정 반복
- 나머지가 0이 되었을 때, 나누는 수가 a와 b의 최대공약수
📍Greatest Common Divisor (GCD)
public static int gcd(int a, int b) { while (b>0) { int tmp=b; b=a%b; a=tmp; } return a; }
📍Least Common Multiple (LCM)
public static int lcm(int a, int b) { return (a*b) / gcd (a,b); }
📝Source Code
using namespace std; int getGCD(int a, int b) { while (b>0) { int tmp=b; b=a%b; a=tmp; } return a; } long long solution(int w,int h) { long long answer = 1; int gcd=getGCD(w,h); int mw=w/gcd; int mh=h/gcd; long long cut=(long long)mw+mh-1; cut*=gcd; answer=(long long)w*h-cut; return answer; }