일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- level3
- effective C++
- PrefixSum
- Silver
- dirtyflag pattern
- BOJ
- programmers
- stack
- 프로세스 상태
- solid 원칙
- Zenject
- Modern C++
- trie
- BFS
- algorithm
- 3D RPG
- Project
- level1
- SWEA
- Gold
- Flyweight Pattern
- two pointer
- 프로그래머스
- knapsack Problem
- Bronze
- binary search
- LEVEL2
- 8-Puzzle
- Euclidean
- Unity
Archives
- Today
- Total
Patrick's Devlog
[BOJ/C++] 숫자 카드(10815번) 본문
1. 개요
https://www.acmicpc.net/problem/10815
10815번: 숫자 카드
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,
www.acmicpc.net
1-1. 설명
숫자 카드는 정수 하나가 적혀있는 카드다. 상근이는 숫자카드 N개를 지니고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 지니고 있는지 아닌지 구하는 프로그램을 작성한다
1-2. 제한 사항
- 첫 줄에는 상근이가 지니고있는 숫자 카드 개수 N이 주어짐
- N은 1 이상 500,000 이하 자연수
- 둘째 줄에는 숫자 카드에 적힌 정수가 주어짐
- 숫자 카드에 적혀있는 수는 -10,000,000 이상, 10,000,000 이하이며, 두 숫자 카드에 같은수가 적혀있는 경우는 없음
- 셋째 줄에는 M이 주어지며, M 또한 1 이상 500,000 이하 자연수
- 넷째 줄에는 숫자 카드에 적힌 정수가 주어지며 둘째줄과 동일한 범위를 지님
2. 구현
2-1. 풀이
모든 숫자를 탐색하여 풀면 시간 초과가 날 것을 예상해서 다른 방법을 생각했었다. 이진 탐색을 이용하면 제한 시간 내에 찾는 것이 가능하다.
2-2. 코드
#include <iostream>
#include <algorithm>
using namespace std;
int binarySearch(int val, int first, int last);
constexpr size_t MAX_NUM = 500000;
int nums[MAX_NUM];
int result[MAX_NUM];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int N, M, num;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> num;
nums[i] = num;
}
sort(nums, nums + N);
cin >> M;
for (int i = 0; i < M; i++) {
cin >> num;
result[i] = binarySearch(num, 0, N-1);
}
for (int i = 0; i < M; i++) {
if (result[i] == -1) cout << "0 ";
else cout << "1 ";
}
return 0;
}
int binarySearch(int val, int first, int last) {
if (first > last) return -1;
int mid = (first + last) / 2;
if (val == nums[mid]) return mid;
else if (val < nums[mid]) return binarySearch(val, first, mid - 1);
else return binarySearch(val, mid + 1, last);
}
'Algorithm > Algorithms Practice' 카테고리의 다른 글
[BOJ/C++] 큐(10845번) (0) | 2022.09.02 |
---|---|
[BOJ/C++] 스택(10828번) (0) | 2022.09.02 |
[BOJ/C++] 수 정렬하기 3(10989번) (0) | 2022.08.31 |
[BOJ/C++] 제로(10773번) (0) | 2022.08.31 |
[SWEA/C++] 이진수 표현(10726번) (0) | 2022.08.23 |