배열 내의 원소 위치 찾기
개요
이번 글에서는 C++로 구현할 수 있는 배열 내의 원소 위치 찾는 방법들에 대해 알아보겠다. 먼저, 가장 기본적인 방식인 순차적인 탐색으로 원소를 비교하는 방법을 살펴본다. 그다음으로는 표준 라이브러리에서 제공하는 std::find와 std::distance 함수를 활용하는 방법을 공부해 보자. 각 방법의 특성을 분석하고, 특정 상황에서 어떤 방법이 최적인지에 대해 이해하도록 하겠다.
본문
먼저 일반적으로 배열에서 원소의 위치를 찾기 위해 for문과 if문을 활용한 방법이다.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v = { 1,2,3,4,5,6,7 };
int target = 5;
for (int i = 0; i < v.size(); ++i)
{
if (v[i] == target)
{
cout << " Found " << target << " at position: " << i << "\n";
return 0;
}
}
cout << " Did not find " << target << "\n";
return 0;
}
위의 코드는 배열의 모든 원소를 처음부터 끝까지 검사하여 원하는 값을 찾는다. 따라서 이 방법의 시간 복잡도는 O(n)이다. 하지만 더 효율적인 방법도 있다.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> v = { 1,2,3,4,5,6,7 };
int target = 5;
auto it = std::find(v.begin(), v.end(), target);
if (it != v.end())
cout << " Found: " << target << " at position: " << distance(v.begin(), it) << "\n";
else
cout << " Did not find " << target << "\n";
return 0;
}
위의 코드는 std::find 함수를 사용하여 원하는 값을 찾은 후, std::distance 함수를 사용하여 그 위치를 계산한다. 이 방법의 시간 복잡도 역시 O(n)이다.
여기서 std::distance() 함수는 두 반복자 사이의 거리를 계산한다. 따라서 배열의 시작점과 반복자 사이의 거리가 곧 특정 원소의 위치가 되는 것이다.
그럼에도 불구하고 std::find 함수를 사용하는 것이 직접 순회하는 것보다 권장된다. 그 이유는, 코드가 간결하며 표준 라이브러리의 최적화를 활용할 수 있기 때문이다. 또한 std::find 함수는 다양한 종류의 컨테이너에 사용할 수 있어 코드의 재사용성이 높아진다.
요약
배열 내 원소 위치 찾기
- std::find() 함수로 값을 찾아내어 반복자에 초기화시킨 후, std::distance() 함수를 이용해 두 인자 사이의 거리 반환
반응형
'Language > C++' 카테고리의 다른 글
[C++] 싱글톤 패턴 (2) with C++ (0) | 2023.08.10 |
---|---|
[C++] 싱글톤 패턴 (1) with C++ (0) | 2023.08.09 |
[C++] 정규 표현식 with C++ (0) | 2023.08.06 |
[C++] sort vs stable_sort with C++ (0) | 2023.08.05 |
[C++] 문자열 변환 - 대문자/소문자 변환 (0) | 2023.07.31 |