728x90
반응형
https://www.acmicpc.net/problem/19637
19637번: IF문 좀 대신 써줘
첫 번째 줄에는 칭호의 개수 N (1 ≤ N ≤ 105)과 칭호를 출력해야 하는 캐릭터들의 개수 M (1 ≤ M ≤ 105)이 빈칸을 사이에 두고 주어진다. (1 ≤ N, M ≤ 105) 두 번째 줄부터 N개의 줄에 각 칭
www.acmicpc.net
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, m, t, power;
string name;
vector<int> iv;
vector<string> sv;
cin >> n >> m;
for(int i = 0; i < n; i++){
cin >> name >> t;
sv.push_back(name);
iv.push_back(t);
}
for(int i = 0; i < m; i++){
cin >> power;
cout << sv[lower_bound(iv.begin(), iv.end(), power) - iv.begin()] << "\n";
}
return 0;
}
칭호의 개수가 10만개 나올 수 있고, 캐릭터의 수가 10만개 나올 수 있으므로 완전탐색으로 찾으려고 할 경우,
최악일 때 10만 * 10만이 되어 시간초과가 난다.
이분탐색은 시간복잡도가 logN이므로, 최악의 경우 100000log100000번만에 모든 경우를 다 찾을 수 있다.
따라서 lower_bound를 사용하여 자신보다 크거나 같으면서 가장 작은 숫자를 찾으면 된다.
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 12018번 Yonsei TOTO (C++) (0) | 2022.02.19 |
---|---|
[BOJ] 11508번 2+1 세일 (C++) (0) | 2022.02.17 |
[BOJ] 1543번 문서 검색 (C++) (0) | 2022.02.16 |
[BOJ] 1485번 정사각형 (C++) (0) | 2022.02.15 |
[BOJ] 24444번, 24445번 알고리즘 수업 - 너비 우선 탐색 1, 2 (C++) (0) | 2022.02.15 |