● find()는 특정 원소를 찾는 알고리즘이며,
● find_if()는 조건에 따라 원소를 찾는 알고리즘입니다.
- vector<int>::iterator it; //반복자생성(아직 원소를 가리키지 않음) - v.begin() : 컨테이너의 시작 원소를 가리키는 반복자를 반환합니다 - v.end() : 컨테이너의 끝 표시 반복자를 반환합니다. |
- iter = find(v.begin(), v.end(), 20) : iter는 구간 [v.begin(), v.end())에서 20값을 갖는 첫번째 원소의 반복자입니다.
- iter = find_if(v.begin(), v.end(), Pred) : iter는 구간 [v.begin(), v.end)에서 단항 조건자 Pred(*p)가 참인 첫 원소의 반복자입니다.
순차열 하나에 포함되는 다른 순차열이 있는지 찾아야 한다면 find_end()와 search()알고리즘을 사용합니다. find_end()는 일치하는 순차열이 여러개라면 마지막 순차열의 반복자를 반환하며 search()는 첫번째 순차열의 반복자를 반환합니다 |
♠ 다음은 find_end() 알고리즘을 이용해 컨테이너 v1의 순차열에 v2의 순차열이 포함되는지를 판단하는 예제입니다.
- iter = find_end(v1.begin(), v1.end(), v2.begin(), v2.end()) : 구간 [v1.begin(), v1.end())의 순차열에 구간 [v2.begin(), v2.end())의 순차열이 일치하는지 판단하여 일치하는 순차열 구간이 여러 개라면 마지막 순차열의 첫 원소 반복자를 반환합니다.
iter는 v1에 v2와 일치하는 순차열 구간은 두 곳이면 이중에서 마지막 순차열의 첫 원소의 반복자입니다.
- 조건자 버전의 find_end() 알고리즘을 사용하면 원소의 비교를 사용자가 결정할 수 있습니다.
<헤더파일 쓰고 다음 예제를 입력하세요>
- iter = find_end(v1.begin(), v1.end(), v2.begin(), v2.end(), Pred) : 구간 [v1.begin(), v1.end())의 순차열과 구간 [v2.begin(), v2.end())의 순차열이 일치하는지 판단하고 일치하는 구간이 여러 개라면 마지막 순차열의 첫 원소 반복자를 반환합니다. 단, 비교는 Pred(*p, *q)를 사용합니다. p는 v1의 순차열 반복자이며 q는 v2의 순차열 반복자입니다.
- [v2.begin, v2.end())의 순차열이 [v1.begin(), v1.end())의 순차열의 원소보다 모두 크거나 같은(<=) 순차열 구간을 찾습니다. 마지막 순차열은 원소가 10, 11, 12인 순차열이므로 iter는 10을 가리키는 반복자가 됩니다.
[문제1] www.acmicpc.net/problem/2798
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는다. 합이 M을 넘지 않는 카드 3장을 찾을 수 있
www.acmicpc.net
[문제2] www.acmicpc.net/problem/2231
2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
[문제3] www.acmicpc.net/problem/7568
7568번: 덩치
우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x,y)로 표시된다. 두 사람 A 와 B의 덩
www.acmicpc.net
[문제4] www.acmicpc.net/problem/1018
1018번: 체스판 다시 칠하기
첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다.
www.acmicpc.net
[문제5] www.acmicpc.net/problem/1436
1436번: 영화감독 숌
666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타
www.acmicpc.net
[문제6] www.acmicpc.net/problem/15596
15596번: 정수 N개의 합
C++14, Java, Python 3, C11, PyPy3, C, C++, C++11, C++17, Python 2, PyPy2, Go, C (Clang), C++ (Clang), C++11 (Clang), C++14 (Clang), C11 (Clang), C++17 (Clang)
www.acmicpc.net
[문제7] www.acmicpc.net/problem/4673 - 함수로 구현
4673번: 셀프 넘버
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,
www.acmicpc.net
[문제8] www.acmicpc.net/problem/1065 - 함수구현
1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나
www.acmicpc.net
- 재귀 함수로 구현하세요 -
[문제9] www.acmicpc.net/problem/10872
10872번: 팩토리얼
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
www.acmicpc.net
[문제10] www.acmicpc.net/problem/10870
10870번: 피보나치 수 5
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n>=2)가
www.acmicpc.net
[문제11] www.acmicpc.net/problem/2447
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
[문제12] www.acmicpc.net/problem/11729
11729번: 하노이 탑 이동 순서
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로
www.acmicpc.net
'C++ STL' 카테고리의 다른 글
18. c++ STL [vector 5일차] 2차원 vector (0) | 2020.04.30 |
---|---|
17. c++ stl find_first_of() for_each() 알고리즘 (0) | 2020.04.16 |
15. c++ stl equal() (0) | 2020.04.05 |
14. c++ stl count(), count_if() (0) | 2020.04.04 |
13. c++ stl int를 string으로 변환 - to_string() (0) | 2020.04.03 |