[백준 실버3] 19637 : IF문 좀 대신 써줘

수민이슈·2023년 10월 13일
0

[C++] 코딩테스트

목록 보기
94/116
post-thumbnail

🖊️ 문제

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


🖊️ 풀이

이분탐색인거 알겠고요..
근데 또 mid잡는거를 잘못했다.

이분탐색의 키포인트는 중간값 설정 기준이라고 생각하는데... 좀 더 연습이 필요할까?
속상하닷.

#include <iostream>
#include <vector>
using namespace std;

typedef long long ll;

int arr[100'001];
string name[100'001];

int main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);

	int n, m;
	cin >> n >> m;

	string str;
	ll maxNum;
	for (int i = 0; i < n; i++) {
		cin >> name[i] >> arr[i];
	}

	ll input;
	for (int i = 0; i < m; i++) {
		cin >> input;

		int left = 0;
		int right = n - 1;
		ll mid = 0;
		string result = "";
		while (left <= right) {
			mid = (left + right) / 2;
			if (arr[mid] < input) left = mid + 1;
			else if (arr[mid] >= input) right = mid - 1;
		}
		if (input > arr[mid]) result = name[mid + 1];
		else result = name[mid];
		cout << result << '\n';
	}
}

0개의 댓글