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

[필자 사고]
간단하게 map자료구조를 이용해서 브루트포스를 이용하는게 아닌 logn형태로 탐색을 진행하여 시간복잡도를 맞혔다.
아래는 자세한 코드 해설이다.
[코드 해설]
- map<int, int> myMap : 정수를 키(key)로 저장하는 맵. 값은 단순히 존재 여부를 표시하기 위해 1로 둡니다.
- N : 처음에 주어지는 정수의 개수.
- M : 찾고자 하는 수의 개수.
Input() 함수
- 정수 N을 입력받습니다.
- N개의 정수를 반복해서 입력받고, 각각을 myMap에 넣습니다.
- myMap[num] = 1;을 통해, 해당 숫자가 존재한다는 표시를 남깁니다.
- 맵은 자동으로 키를 정렬하며 저장하기 때문에, 탐색 시 이진 탐색 기반의 O(logN) 시간으로 빠르게 찾을 수 있습니다.
Game_Start() 함수
- 정수 M을 입력받습니다.
- M개의 정수를 차례대로 입력받습니다.
- 각 정수에 대해 myMap[num]을 확인합니다.
- 값이 1이라면(즉, 입력 집합에 존재한다면) 1을 출력합니다.
- 존재하지 않으면 0을 출력합니다.
- 출력은 공백으로 구분하여 이어 붙여 나갑니다.
main() 함수
- ios::sync_with_stdio(false);와 cin.tie(0), cout.tie();를 통해 입출력 속도를 빠르게 설정합니다.
- Input() 함수를 호출해 N개의 숫자를 맵에 저장합니다.
- Game_Start() 함수를 호출해 M개의 숫자에 대해 존재 여부를 출력합니다.
[소스 코드]
#include <iostream>
#include <vector>
#include <map>
using namespace std;
map<int, int> myMap;
int N, M;
void Input() {
cin >> N;
for (int i = 0; i < N; i++) {
int num;
cin >> num;
myMap[num] = 1;
}
}
void Game_Start() {
cin >> M;
for (int i = 0; i < M; i++) {
int num;
cin >> num;
if (myMap[num] == 1) {
cout << 1 << " ";
}
else {
cout << 0 << " ";
}
}
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie();
Input();
Game_Start();
}'백준 > 자료구조' 카테고리의 다른 글
| 백준 1269 c++ "대칭 차집합" -PlusUltraCode- (0) | 2025.09.17 |
|---|---|
| 백준 1158 c++ "요세푸스 문제" -PlusUltraCode- (0) | 2025.09.17 |
| 백준 1427 c++ "소트인사" -PlusUltraCode- (0) | 2025.09.14 |
| 백준 1406 c++ "에디터" -PlusUltraCode- (0) | 2025.05.27 |
| 백준 17353 c++ "하늘에서 떨어지는 1, 2, ..., R-L+1개의 별" -PlusUltraCode- (0) | 2025.01.20 |