find()와 rbegin(), rend()

박정훈·2025년 1월 29일

cpp

목록 보기
2/5
post-thumbnail

find(v.rbegin(), v.rend(), 찾을 무언가)

vector<int> v = { 1, 3, 3, 4, 5, 6, 7, 3, 1 };

find(v.rbegin()+3, v.rend(), 7) - v.rbegin();

이렇게 되면 7은 못 찾고 v.size() 만큼의 값인 9가 출력된다.


cout << "Index of 8 : " << find(v.rbegin(), v.rend(), 8) - v.rbegin();

뒤에서부터 몇 번째에 있는지 알려주기 때문에 v.size() 만큼의 값이 9가 출력된다.

근데 신기한 건,

cout << "Index of 8 : " << find(v.rbegin(), v.rend()-1, 8) - v.rbegin();

이렇게 하면 v.size() 값이 출력되는 게 아니라 v.rend() - 1 - v.rbegin() 값이 출력된다.
쉽게 말하면 rend쪽 잘라버리고 '전체 크기가 8인 배열에서 못 찾으면 8이 나오듯이' 나온다.


cout << "Index of 8 : " << v.rend() - find(v.rbegin(), v.rend(), 8);

0이 출력된다.

cout << "Index of 7 : " << v.rend() - find(v.rbegin(), v.rend(), 7);
                         //9        - 2

7이 출력된다.
인덱스를 찾으면 바로 함수가 종료돼서 뒤에서부터 find 해야할 때 쓸 수 있을 것 같다.
예를 들면, banana 같은 글자에서 n이 마지막으로 나오는 위치를 알고 싶을 때.


코드카타 level 1 가장 가까운 글자 문제에서
해당 인덱스 전에 같은 글자가 있다면 그 거리를 내놓아야 하는데, 없다면 -1을 내놓는 식이다.
floor => [-1,-1,-1,1,-1]
for loop를 써서 바로 위에 나온 함수를 쓰면 되겠다.

0개의 댓글