728x90
반응형

 

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의 순차열이 포함되는지를 판단하는 예제입니다.

c++ stl find_end()

- 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

 

반응형
Posted by 명문코딩컴퓨터
,