반응형
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
#문제 간단 정리
해쉬문제다
#문제 해결 방법
unordered map 으로 풀 수 있지만..
해쉬를 잘 알아볼겸 해쉬를 직접 구현한 코드로 올린
#전체 코드
#include <iostream>
#include <vector>
#include <string>
using namespace std;
const int TABLE_SIZE = 100003; // 적당한 소수 크기의 해시 테이블
// 간단한 문자열 해시 함수 (131을 곱하는 방식)
int getHash(const string& s) {
unsigned long long hash_val = 0;
for (char c : s) {
hash_val = hash_val * 131 + c;
}
return hash_val % TABLE_SIZE;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
for (int t = 1; t <= T; t++) {
int N, M;
cin >> N >> M;
// 해시 테이블 초기화: TABLE_SIZE 크기의 벡터 배열
vector<vector<string>> hashTable(TABLE_SIZE);
string str;
// 첫 번째 집합의 문자열들을 해시 테이블에 저장
for (int i = 0; i < N; i++) {
cin >> str;
int idx = getHash(str);
hashTable[idx].push_back(str);
}
int answer = 0;
// 두 번째 집합의 문자열들을 하나씩 확인
for (int i = 0; i < M; i++) {
cin >> str;
int idx = getHash(str);
// 해당 해시 버킷(bucket) 내에서 문자열이 존재하는지 선형 탐색
for (const auto& s : hashTable[idx]) {
if (s == str) {
answer++;
break; // 중복 없이 집합에 한 번만 등장하므로 발견하면 바로 종료
}
}
}
cout << "#" << t << " " << answer << "\n";
}
return 0;
}
반응형
'[SW Expert Academy]' 카테고리의 다른 글
SW Expert Academy 1251. [S/W 문제해결 응용] 4일차 - 하나로 [C++] (1) | 2025.02.07 |
---|---|
SW Expert Academy 2930. 힙[C++] (0) | 2025.02.06 |
SW Expert Academy 7465. 창용 마을 무리의 개수[C++] (0) | 2025.02.05 |
SW Expert Academy 1267. [S/W 문제해결 응용] 10일차 - 작업순서[C++] (0) | 2024.05.15 |
SW Expert Academy 1224. [S/W 문제해결 기본] 6일차 - 계산기3[C++] (0) | 2024.04.17 |