각도 a가 주어졌을 때, 모든 내각이 a와 동일한 정다각형(regular polygon)을 만들 수 있는지 확인하는 문제입니다.
예를 들어 입력값이 a = 120이라면 결과는 True가 됩니다. 육각형의 모든 내각이 120°이기 때문입니다.
수학적 원리
변의 개수가 n인 정다각형의 내각 공식은 다음과 같습니다.
$$Interior\ Angle(a)=\frac{180\times(n-2)}{n} \quad [n=\text{다각형의 변의 개수}]$$
이 식을 n에 대해 정리하면 다음과 같습니다.
$$n=\frac{360}{180-a}$$
즉, 계산된 n이 정수라면 해당 각도를 내각으로 가지는 정다각형이 존재한다는 뜻입니다.
참고로 대표적인 예시는 다음과 같습니다.
- a = 60° → 삼각형 (n = 3)
- a = 90° → 사각형 (n = 4)
- a = 108° → 오각형 (n = 5)
- a = 120° → 육각형 (n = 6)
반면 a가 180° 이상이거나 위 공식의 결과가 정수가 아니라면, 그 각도를 내각으로 하는 정다각형은 만들 수 없습니다.
해결 접근 방법
이 문제는 다음 단계로 해결할 수 있습니다.
- sides := 360 / (180 - a) 를 계산합니다.
- sides에 소수 부분이 없다면(즉, 정수라면) True를 반환합니다.
- 그렇지 않으면 False를 반환합니다.
예제 코드
아래 구현 예시를 통해 더 잘 이해해 보겠습니다.
def solve(a):
sides = 360 / (180 - a)
if sides == int(sides):
return True
return False
a = 120
print(solve(a))
입력
120
출력
True
복잡도 분석
이 알고리즘은 단순히 나눗셈 한 번과 정수 비교만 수행하므로 시간 복잡도는 O(1), 공간 복잡도 역시 O(1)입니다.
또한 실전 코드에서는 a ≥ 180일 경우 0으로 나누거나 음수가 되는 상황이 발생할 수 있으므로, 입력 값의 범위 검증을 추가하는 것이 안전합니다.