- [ 장르 ] 탐색
- [ 문제 ]
- My Code
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int N,M,data;
vector<int> arr, check;
cin.tie(NULL); cout.tie(NULL); ios_base::sync_with_stdio(false);
cin >> N;
for (int i = 0; i < N; i++)
{
cin >> data;
arr.push_back(data);
}
cin >> M;
for (int i = 0; i < M; i++)
{
cin >> data;
check.push_back(data);
}
//sort(arr.begin(), arr.end()); // 처음엔 두 벡테를 정렬해놓고
//sort(check.begin(), check.end()); // 비교하는 과정을 손볼려했는데 생각해보면 출력할 때 순서가 맞지 않는거 처럼 나온다.
for (int i = 0; i < check.size(); i++)
{
auto iter = find(arr.begin(), arr.end(), check[i]);
if (iter == arr.end())
cout << 0 << '\n';
else
cout << 1 << '\n';
}
return 0;
}
" find( ) 함수의 다시 한번 감사함을 느끼자. "
- CheckPoint
- 정답률이 낮아서, 성능을 높이는 문제인가하고 겁을 먹었다.
그래서 일단 C++에 대한 입출력 성능을 높이기 위해 상단부에 선언을 해주고 개행도 '\n'으로 처리했다.- 문제 포인트는 첫번째 받은 리스트안에 두번째 받은 리스트의 정수가 있는지 "들어온 순서대로" 체크해서 있으면 '1' 아니면 '0'을 출력하는 문제이다.
- 처음에는 뭔가 무작위로 들어오니 sort( )함수로 정렬 시킨 후 조건을 조작하면 최소한으로 탐색하지 않을까 했는데, 생각은 좋으나 이렇게하면 결과를 출력할 때, 기존의 리스트 순서가 바뀌어서 결과순서도 바뀌게 된다.
- 그래서 sort( )부분만 주석처리하고 제출했더니 정답이었다.
- 무엇보다 이 과정에서 check 벡터( 리스트로 생각하고 씀 )요소마다 arr 벡터( 리스트로 생각하고 씀 )내부에 존재하는지 for문을 통해 작성을 할 수도 있지만, find( )함수가 생각이나서 활용했다.
- ★ find( iter.begin( ), iter.end( ), 찾을 원소 ) 함수는 찾을 원소를 기준으로 iterator에 끝까지 조사해서 존재하면 그 위치의 iter를 반환하고 끝까지 조사했는데 찾을 원소가 없으면 v.end( ) (== 이것도 iterator ) 를 리턴한다. 이를 이용해서 if 문을 작성해서 처리했다.
728x90
반응형
'Algorithm Practice > [ Baekjoon ]' 카테고리의 다른 글
[C++] 괄호 (0) | 2020.10.04 |
---|---|
[Baekjoon][#1927] 최소 힙 (0) | 2020.09.25 |
[Beakjoon][#1021] 회전하는 큐 (0) | 2020.09.25 |
[Baekjoon][#10866] 덱(Deque) (0) | 2020.09.24 |
[Baekjoon][#11729] 하노이 탑 이동순서 (0) | 2020.09.23 |