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 |