본문 바로가기
ALGORITHM/C++ - 백준

[백준 1920] 수 찾기

by DDongYeop 2023. 11. 13.
728x90

문제

https://www.acmicpc.net/problem/1920

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

 

 

문제 분석

두가지의 변수 집합이 주어지고, 첫번째 집합에 두번째 집합에 해당하는 변수가 존재한다면 1을, 존재하지 않는다면 0을 출력한다. 

 

 

알고리즘 설계

정수형 변수 n, m, input, num을 선언하고, int형을 가진 vector v1을 선언해준다 . 

n은 첫번째 집합의 개수, m은 두번째 집합의 개수, input은 반복문을 돌며 입력 받을 변수, num은 이분 탐색을 돌리고 받을 변수이다. 또 v1은 첫번째 집합의 변수를 담을 vector이다. 

 

n을 입력 받고, 그 값에 맞춰 반복문을 돌려준다. 

반복문 안에서 input으로 입력 받고, v1에 넣어준다. 

 

이후 v1을 정렬해주고, 

 

m을 입력 받은 후 반복문을 돌려준다. 

input으로 입력 받고, *lower_bounce을 v1값과 input값을 넣은 값을 num에 넣고, 

num과 input이 같다면 1을 같지 않다면 0을 출력한다. 

 

 

유의점

이분 탐색을 유의해서 작성하자 ! 

 

 

코드

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	int n, m, input, num;
	vector<int> v1;
	cin >> n;
	for (int i = 0; i < n; ++i)
	{
		cin >> input;
		v1.push_back(input);
	}
	sort(v1.begin(), v1.end());

	cin >> m;
	for (int i = 0; i < m; ++i)
	{
		cin >> input;
		num = *lower_bound(v1.begin(), v1.end() - 1, input);
		if (num == input)
			cout << "1\n";
		else
			cout << "0\n";
	}
}
728x90

'ALGORITHM > C++ - 백준' 카테고리의 다른 글

[백준 2805] 나무 자르기  (1) 2023.11.22
[백준 5397] 키로거  (0) 2023.11.14
[백준 25192] 인사성 밝은 곰곰이  (1) 2023.11.13
[백준 11004] K번째 수  (0) 2023.11.13
[백준 10825] 국영수  (0) 2023.11.09

댓글