n개의 꼭짓점, n개의 대칭축, n개의 회전점이 있는 다각형이 있다고 가정합니다. 다음은 뒤집는 축과 회전점에 해당됩니다.
- n이 홀수이면 뒤집는 각 축은 한 꼭짓점과 반대쪽 변의 가운데만 통과합니다.
- n이 짝수이면 축의 절반은 한 쌍의 반대 꼭짓점을 통과하고 나머지 절반은 한 쌍의 반대 변을 통과합니다.
- 추종하는 두 축의 각도는 360/2n입니다.
이제 제공된 다각형을 회전합니다. n개의 서로 다른 유형의 회전자가 있으며 k-회전자는 k축에서 다각형을 시계 방향으로 (360 x k)/n도 회전합니다. 여러 쌍의 정수를 포함하는 목록 입력 목록이 있습니다. 쌍의 첫 번째 정수는 다각형이 뒤집힐 것인지 회전할 것인지를 나타냅니다. 첫 번째 정수가 1이면 다각형이 회전하고 2이면 다각형이 뒤집힙니다. 두 번째 정수는 k입니다. 폴리곤이 뒤집히면 k축에서 뒤집힙니다. 그렇지 않으면 회전하면 360/2n의 각도로 회전합니다. 그런 다음 목록이 비어 있지 않은 동안 회전 및 뒤집기가 수행됩니다.
여기서 우리의 임무는 폴리곤이 초기 위치로 재설정될 수 있도록 목록에 다른 요소를 추가하는 것입니다.
이미지는 두 가지 유형의 다각형의 회전 축을 지정합니다.
따라서 입력이 n =6, input_list =[[1, 2], [1, 4], [2, 3], [2, 5], [1, 6]]인 경우 출력은 다음과 같습니다. (1, 4)
변환 후 네 번째 축을 따라 회전하면 다각형이 초기 위치로 재설정됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- decision_var :=거짓
- 위치:=0
- input_list의 각 항목에 대해 다음을 수행합니다.
- x :=항목[0]
- y :=항목[1]
- x가 1과 같으면
- 위치 :=위치 + y
- 그렇지 않으면
- 위치 :=y - 위치
- decision_var :=not(decision_var)
- 위치 :=위치 모드 n
- decision_var가 0이 아니면
- 쌍(2, 위치) 반환
- 그렇지 않으면
- 쌍(1, n - 위치) 반환
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(n, input_list): decision_var = False position = 0 for item in input_list: x = item[0] y = item[1] if x == 1: position += y else: position = y - position decision_var = not decision_var position = position % n if decision_var: return (2, position) else: return (1, n - position) print(solve(6, [[1, 2], [1, 4], [2, 3], [2, 5], [1, 6]]))
입력
6, [[1, 2], [1, 4], [2, 3], [2, 5], [1, 6]]
출력
(1, 4)