1. 역순(Reverse)
역순(Reverse)의 개념
역순(Reverse)은 앞에서 n번째 값과 뒤에서 n번째 값을 차례로 교환한다.
두 값을 교환하기 때문에 배열 길이의 절반의 순환문만 돌면 된다.
만약 배열 길이만큼 돈다면 역순의 역순이라 다시 본래의 순서대로 된다.
▼앞에서 n번째와 뒤에서 n번째를 교환한다.
C99
▼ 관련 개념
Loop & Pointer & Call By Address
▼ 구현 코드
void Swap(int* lhs, int* rhs)
{
int _temp = *lhs;
*lhs = *rhs;
*rhs = _temp;
}
void Reverse(int iArr[], int length)
{
for (int i = 0; i < (length / 2); i++)
{
Swap(&iArr[i], &iArr[length - i - 1]);
}
}
For문 안에서 (length / 2)로 배열 길이의 절반만 작동하는 것이 중요하다.
내부적으로 (length / 2)는 int로 되기 때문에 소수점은 사라진다.
CPP B.11
▼ 관련 개념
Loop & STD
▼ 구현 코드
#include <algorithm>
void Reverse(int iArr[], int length)
{
for (int i = 0; i < (length / 2); i++)
{
std::swap(iArr[i], iArr[length - i - 1]);
}
}
CPP A.98 <algorithm> 라이브러리를 사용한 방법이다.
교환 함수의 개념을 이해하고 있다면 직접 구현한 함수보다 내장 라이브러리 함수를 사용하는 편이 속도가 훨씬 빠르다.
참조자(&)를 사용한 교환 함수는 0. 교환 함수(Swap)를 살펴보자.
CPP A.17
▼ 관련 개념
STD
▼ 구현 코드
#include <algorithm>
int main()
{
std::array<int, 5> iArr = { 5, 4, 3, 2, 1 };
std::reverse(iArr.begin(), iArr.end());
return (0);
}
CPP A.17 <algorithm>의 std::reverse 함수를 사용해서 역순으로 정렬한다.
마찬가지로 프로그래머가 직접 짠 역순 정렬 함수보다 훨씬 빠른 처리 속도를 가진다.
CPP의 최신 표준에 가까울수록
프로그래머가 로직에 좀 더 집중할 수 있도록 하는 언어 철학이 두드러짐을 알 수 있다.
점차 코딩 테스트에서 사용되는 컴파일러가 CPP A.17로 되고 있다.
역순 정렬 자체를 구현하는 게 아니라면 표준 함수를 사용하여 로직에 집중하는 것이 좋다.
하지만 어디까지나 알고 있기 때문에 편리하기 위해서 사용하는 것이지
내부 작동 원리를 모르면서 사용하는 것은 학습에 도움되지 않는다.