3 Sep 2020

모듈러 연산

모듈러 연산


길이가 N인 배열에서 현재 홍길동은 i번째에 위치해 있다고 생각해보자

왼쪽이동은 음수, 오른쪽이동은 양수라고 했을때 원형으로 이루어져 있다고 생각해보면

1의 왼쪽은 N, N의 오른쪽에는 1이 위치해있다.


움직인 칸수

move=(move%N);

문제에서 move만큼 움직였고 배열의 전체 길이는 N이다 그럼 실질적으로 움직인 칸수는 실제움직인 칸수=(move%N);

오른쪽으로 x칸 이동한경우 홍길동의 다음 위치는 어디인가?

int next=(pos+move)%N;
// next값은 바로 pos에서 move만큼 오른쪽으로 이동했을때 위치이다.

(현재위치+이동칸수)%배열길이


왼쪽으로 x칸 이동한 경우 홍길동의 다음 위치는 어디인가?(-방향 이동이므로 주의 해야한다.)

int next=(pos + (N-(move%N))) % N;
// next값은 바로 pos에서 move만큼 왼쪽으로 이동했을때 위치이다.(move의 숫자는 양수다)

(현재위치+(배열길이-(왼쪽이동%배열길이)))%배열길이 (배열길이-(왼쪽이동%배열길이) => 왼쪽이동을 오른쪽으로 얼마나 이동했는가로 치환


Tags:
0 comments