728x90
728x90

일차원 배열의 시프트(Shift)

 

배열의 1번 인덱스부터 사용하기

  • 개발을 한다거나 또는 과거와 같이 메모리 절약을 위해서는 배열을 0번 인덱스부터 사용하는 것이 일반화되어 있다.
  • 하지만, 코딩 테스트를 위해서 수학적인 계산을 한다거나 또는 알고리즘(Algorithm)을 활용하여 문제를 해결하기 위해서는 0번 인덱스를 비워두고 1번 인덱스부터 사용하는 것이 문제를 계산하기에 조금 더 편리할 때가 많이 있다.
  • 배열을 1번 인덱스부터 사용하고자 할 때, 배열의 0번 인덱스의 공간을 만들지 않고 바로 1번 인덱스의 공간부터 만들어 사용할 수는 없다.
    • 따라서 배열을 선언할 때 입력으로 들어오는 데이터의 최대 개수(N)부터 배열의 길이는 항상 1개가 더 많도록(N+1) 선언되어야 한다.

 

왼쪽 시프트(Left Shift)

  • 일차원 배열의 첫 번째 요소의 값은 배열 마지막 요소의 값으로 보내고, 나머지 배열의 요소들의 값은 자기 자신의 왼쪽 인덱스의 값으로 하나로 이동하는 작업
  • 배열의 첫 번째 요소의 값을 잠시 저장해서 보관하기 위한 임시 변수(temp)가 하나 필요하다.
1 2 3 4 5
a[1] a[2] a[3] a[4] a[5]

 

구현

temp = a[1];
a[1] = a[2];
a[2] = a[3];
a[3] = a[4];
a[4] = a[5];
a[5] = temp;
int temp = a[1];

for (int i = 1; i <= 4; i++) {
    a[i] = a[i + 1];
}

a[5] = temp;

 

오른쪽 시프트(Right Shift)

  • 일차원 배열의 마지막 요소의 값은 배열의 첫 번째 요소의 값으로 보내고, 나머지 배열의 요소들의 값은 자기 자신의 오른쪽 인덱스의 값으로 하나로 이동하는 작업
  • 배열의 첫 번째 요소의 값을 잠시 저장해서 보관하기 위한 임시 변수(temp)가 하나 필요하다.
  • 오른쪽으로 배열을 시프트하기 위해서는 연산 순서뒤에서 앞으로 처리해야 한다.
1 2 3 4 5
a[1] a[2] a[3] a[4] a[5]

 

구현

temp = a[5];
a[2] = a[1];
a[3] = a[2];
a[4] = a[3];
a[5] = a[4];
a[1] = temp;
int temp = a[5];

for (int i = 5; i >= 2; i++) {
    a[i] = a[i - 1];
}

a[1] = temp;
728x90
728x90

'Programming > C' 카테고리의 다른 글

[C] 배열(Array)  (0) 2022.09.28
[C] 포인터(Pointer) 연산 정리  (0) 2022.06.24