-
(이분탐색)1920 수 찾기/10816 숫자 카드 2/18870 좌표압축/7785 회사에 있는 사람카테고리 없음 2022. 2. 23. 21:14
(1)1920 수 찾기
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
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<vector> #include<algorithm> #include<queue> using namespace std; vector<int> vec; int main() { cin.tie(NULL); cin.sync_with_stdio(false); cout.tie(NULL); int N; cin >> N; for (int i = 0; i < N; i++) { int a; cin >> a; vec.push_back(a); } sort(vec.begin(), vec.end()); int M; cin >> M; while (M--) { int t; cin >> t; cout<<binary_search(vec.begin(), vec.end(), t)<<"\n"; } return 0; }
(2)10816 숫자 카드2
https://www.acmicpc.net/problem/10816
10816번: 숫자 카드 2
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,
www.acmicpc.net
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<vector> #include<algorithm> #include<queue> using namespace std; vector<int> vec; int main() { cin.tie(NULL); cin.sync_with_stdio(false); cout.tie(NULL); int N; cin >> N; while (N--) { int a; cin >> a; vec.push_back(a); } sort(vec.begin(), vec.end()); int num=0; int M; cin >> M; while (M--) { int t; cin >> t; auto lower_idx = lower_bound(vec.begin(), vec.end(), t); auto upper_idx = upper_bound(vec.begin(), vec.end(), t); num = upper_idx - lower_idx; cout << num << " "; } return 0; }
(3) 18870 좌표 압축
https://www.acmicpc.net/problem/18870
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<vector> #include<algorithm> #include<queue> using namespace std; vector<int> vec; vector<int>diff; int arr[1000001]; int main() { cin.tie(NULL); cin.sync_with_stdio(false); cout.tie(NULL); int N; cin >> N; for (int i = 0; i < N;i++) { int a; cin >> a; arr[i] = a; vec.push_back(a); } sort(vec.begin(), vec.end()); for (int i = 0; i < N - 1; i++) { if (vec[i] != vec[i + 1]) diff.push_back(vec[i]); } diff.push_back(vec[N - 1]); for (int i = 0; i < N; i++) { cout<<lower_bound(diff.begin(), diff.end(), arr[i]) - diff.begin()<<" "; } return 0; }
(4)7785 회사에 있는 사람
https://www.acmicpc.net/problem/7785
7785번: 회사에 있는 사람
첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는
www.acmicpc.net
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<vector> #include<algorithm> #include<queue> using namespace std; vector<string> vec; int main() { cin.tie(NULL); cin.sync_with_stdio(false); cout.tie(NULL); int n; cin >> n; for (int i = 0; i < n; i++) { string name; string inout; cin >> name>>inout; vec.push_back(name); } sort(vec.rbegin(), vec.rend()); int flag = 100; for (int j = 0; j < n ; j++) { if (j<n-1&&vec[j] == vec[j + 1]) { j++; } else { cout << vec[j] << "\n"; } } return 0; }