자기개발/코딩테스트
C++(코딩테스트) - 멀쩡한 사각형
pi92
2021. 11. 17. 22:14
이 문제는 수학 문제와 관련이 많고
어떤 규칙이 있을지 살펴보다가
서로소인경우 w+h-1인것을 알게되었다.
이후 못쓰는 사각형 조건 2가지를 발견하였고
1. if (w == 1 || h == 1) return 0;
2. 최대공배수 * (w*h/최대공배수 -1)
전체 사각형의 수 w*h 에서 빼주면 된다.
참고로 (long long)w * h 안해주면 값이 초과되어 실패가 될 수 있다.
int gcd(int a, int b) { return (a % b == 0 ? b : gcd(b, a % b)); }
long long solution(int w, int h) {
long long answer = 1;
if (w == 1 || h == 1)
{
return 0;
}
int a = gcd(w, h);
answer = ((long long)w * (long long)h) - (w / a + h / a - 1) * a;
return answer;
}