1920번: 수 찾기

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

www.acmicpc.net

문제

N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.

 

정수가 존재하는지 확인만 하면 되기에, 탐색 문제라고 생각했다. 이분 탐색으로 접근해서 풀었는데 바로 성공한 문제이다. 그리고 mid를 구하는 코드부분에서 start+end / 2의 부분에서 연산자 우선순위를 고려하지 않고 코드를 짜서 디버깅할 때 헤매었다. 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
using namespace std;

int n_array[100001];
int m_array[100001];

int binary_search(int start, int end, int target)
{
	int mid = 0;
	int result = 0;

	while (start <= end) {
		mid = (start + end) / 2; //연산자 우선순위 신경안써서 mid값이 이상하게 나왔음. 아니.. 이런 실수를..
		if (n_array[mid] == target) return 1;
		else if (n_array[mid] > target) end = mid - 1;
		else if (n_array[mid] < target) start = mid + 1;
	}

	return result;
}

int main()
{
	int n, m, temp = 0;
	int result = 0;
	
	cin >> n;
	for (int i = 0; i < n; i++) {
		scanf("%d", &n_array[i]);
	}
	//이분 탐색을 위한 배열정렬
	sort(n_array, n_array + n);

	cin >> m;
	for (int i = 0; i < m; i++) {
		scanf("%d", &m_array[i]);
	}

	//수 찾기
	for (int i = 0; i < m; i++) {
		result = binary_search(0, n-1, m_array[i]); //end값으로 n을 넘겨도 맞았지만, n-1로 보내야 정확.
		printf("%d\n", result);
	}


	return 0;
}

연산자 우선순위를 활용한 괄호 꼭 작성하기!