본문 바로가기
알고리즘 공부

중등수학으로 2차원 배열 방향 전환 이해하기

by 지금갑시다 2024. 1. 3.

 

 

현재의 상태(State)가 앞으로의 동작에 영향을 주는 경우가 있는데, 이를 조금 쉽게 다룰 수 있게 노력해보자!

중등수학의 개념을 활용해 배열의 방향 전환에 추가로 도움도 줄 예정이다!

 

 

 

쉽게 만들어보고 싶은 상황은 그림과 같다.

위쪽

 

위의 그림에서, 현재 A의 위치에 있고, 방향은 위를 바라보고 있을 때 A가 확인할 수 있는 칸, 즉 영향이 미치는 범위를 파란색으로 빗금 쳐놓은 부분이라 생각하자

 

A를 (x, y)로 가정하고 A로부터 가장 가까운 파란색을 좌표로 표현해보면, 위의 그림과 같다.

 

 

만약, A가 왼쪽을 본다면?

왼쪽

 

파란색 영향을 미치는 구간은 A가 회전한 방향 쪽으로 같이 돌아갈 것이다. 역시 파란색의 좌표를 표현해보면 위와 같이 돌아갈 것이다.

 

중등수학이 나오려면, 한 바퀴를 다 돌려봐야 한다!

다 돌려보자!

 

 

(좌) 아래, (우) 오른쪽

 

 

네 방향으로 다 돌려본 것을 표로 정리해 한 화면에서 보면, 아래의 표를 확인할 수 있다. 

아니 이게 뭔 표인가요?

 

 

 

'위' 행을 보면 A의 위치 (x, y)

(-1, 0) -> (x-1, y)

(-1, 1) -> (x-1, y+1)

(-2, 1) -> (x-2, y+1) 

 

과 같이 파란색 영역의 상수항만 나열해 놓은 것이다.

이 상수항 중 x 에 영향을 미치는 상수들을 X로, y에 영향을 미치는 상수들을 Y로 표현하자면,

'위' 행의 경우 (X, Y)가 될 것이다.

그림에서는 각 행의 우측 파란색으로 써 놓은 부분이다.

 

 

 

상수 인덱스들이 반복되는 규칙이 보이지 않는가..?!?!!!

 

일례로 '위'와 '아래' 행을 비교해보면, '위' 행에서는 (X, Y) 로 표시되는 상수항이 (-X, -Y) 로 표시될 수 있다.

이는 즉 각각의 점들을 X축 대칭, Y축 대칭을 하게 되면 나오는 결과로, 중등수학이 활용되는 곳이다 ㅎㅎ...

 

 

위 -> 오른쪽 으로 회전되는 경우, 1. Y = X 의 함수에 대칭시키고, 2. X축에 대칭 시킨 결과가 되는 것이다.

X축에 대칭 시켜 나온 그래프는 실제로 '위' 를 보고 있는 그래프를 반시계 방향으로 270도 회전시킨 결과와 같게 된다!

위 -> 오른쪽 과정

 

 

이렇게 위 -> 왼쪽 -> 아래 -> 오른쪽 으로 회전하는 과정들을 모두 그래프의 대칭 이동으로 생각해볼 수 있다.

 

이는 실제로 코딩을 하는 경우에도 한쪽 방향으로만 상수 인덱스를 만들면, 각각의 방향에 대해서는 대칭 이동시켜 구현이 가능하므로, 굉장히 효율적인 인덱스 활용될 수 있다!!

 

즉 아래의 식처럼 전체의 인덱스를 다 작성해주는 방식에서

X방향 = [
	위 [-1, -1, -2],
    왼쪽 [0, -1, -1],
    아래 [1, 1, 2],
    오른쪽 [0, 1, 1]
]
Y방향 = [
	위 [0, 1, 1],
    왼쪽 [-1, -1, -2],
    아래 [0, -1, -1],
    오른쪽 [1, 1, 2]
]

 

아래와 같이 간략하게 표현할 수 있는 것이다!

X방향 = [-1, -1, -2]
Y방향 = [0, 1, 1]

위 = [X, Y]
왼쪽 = [-Y, X]
아래 = [-X, -Y]
오른쪽 = [Y, -X]

 

 

끘!

 

'알고리즘 공부' 카테고리의 다른 글

Greedy라는 방법론  (0) 2024.03.19
얕보면 안되는 a = b  (0) 2024.02.18