멀쩡한 사각형
문제정의
1x1cm가 단위인 모눈종이에 그린 사각형의 가로, 세로길이가 주어진다. 여기에 꼭짓점을 잇는 대각선을 그었을 때, 선이 그이지 않은 1x1크기의 사각형의 개수를 구하는 문제이다. 이 문제는 직선의 방정식을 이용하여 문제를 풀었다.
문제풀이
전체 코드는 다음과 같다. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24public class FineRectangle {
//프로그래머스 문제풀이 level2 멀쩡한 사각형
public static void main(String[] args)
{
int w = 8;
int h = 12;
long answer = 0;
double a = h*(-1)/(double)w;
int b = h;
for(int i = 1; i < h; i++)
{
double x = (i-b)/a;
answer += (long)x;
}
answer *= 2;
System.out.print(answer);
}
}
최종적인 시간복잡도는 \(O(h)\)이다.
테스트
최대공약수를 통해서 이 문제를 푼 사람도 있었다. 도대체 그런 규칙은 어떻게 알아내는 지 신기하다. 패턴이 존재하는 것 같은 느낌은 받았지만, 필자는 그 규칙까지 찾아내지 못했다. 덕분에 유클리드 호제법도 익힐 수 있었다.