boj
1920 수찾기.
mallang_col
2022. 12. 25. 19:47
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](https://www.acmicpc.net/problem/1920)
문제를 보면 결국 n까지 들어온 친구를 정렬하고
다음 들어오는 친구들을 n에서 부터 찾는 알고리즘이 필요하다.
여기서 그냥 다 찾게된다면 로직상 너무 오랜 시간이 걸릴 수 있기 때문에
부분으로 나뉠 필요성을 찾게 되었다 .따라서
절반을 검색하고 절반을 나누는 로직을 구상하였고
int solve(int s, int e, int fnd)
{
if (s > e)
return (0);
int mid = (s + e) / 2;
if (v[mid] == fnd) {
return 1;
} else if (v[mid] > fnd) {
return solve(s, mid - 1, fnd);
}
return solve(mid + 1, e, fnd);
}
위와 같이 코드를 작성하였다.
여기서 처음에 cin 을 통해 입력받고 출력을 endl을 통해 하였는데 위와10만개 정도 들어오는 로직에서는
시간초과가 나더라 따라서
cin.tie(NULL);
cout.tie(NULL);
출력을 '\n'으로 변경하였더니 문제없이 통과하게 되었다.