Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 | 30 | 31 |
Tags
- 대수경
- LeggedRobot
- HJB방정식
- BOJ
- 정렬
- 자료구조
- C++
- 다리로봇
- 수학
- std::sort
- mit
- 전국 대학생 수학 경시대회
- 텔레스코픽로봇
- baekjoon
- mathematics for computer science
- lqr
- 실버 5
- 문자열
- 큐
- 로보틱스
- 논문리뷰
- 백준
- 구현
- 6.042j
- 실버 4
- 집합과 맵
- 로봇공학
- 최적제어
- MIT opencourse
- baekjoon problem solving
Archives
- Today
- Total
서두르지 말고 쉬지 말자
백준 15829번 Hashing (C++) 본문
solved.ac 티어: 브론즈 2
문제 유형 : 구현, 문자열, 해싱
문제 배경 지식
1. 해싱(Hashing)이란?
- 임의의 길이와 형태를 가진 데이터를 고정된 크기의 값(해시값, hash value)으로 변환하는 과정 또는 방법이다. 이때 사용하는 변환 규칙이 해시 함수(hash function)이다.
- 해시값이 특정 배열의 인덱스라는 의미를 가지면 이를 해시 주소라고 한다.

해시 충돌 : 서로 다른 키가 같은 해시값을 가지는 것으로 반드시 존재하지만 해시 충돌을 줄일수록 좋은 해시 함수이다.
어디에 쓸까?
1. 빠른 데이터 검색 : O(1)으로 해시 테이블 자료형과 함께 쓰인다.
2. 고정된 길이로 변환
3. 인덱스 계산 : 1번과 일맥상통한 내용
문제 해결 소감 : 문제에서 주어진 해시함수를 그대로 구현하는 것이라서 별로 어렵지 않지만 오버플로우를 고려하지 않으면 절반만 맞게 된다.
문제 해결 전략 : 문제에서 말한 해시함수를 그대로 구현하되, 오버플로우 방지를 위해 모듈러 연산을 값이 커질 때마다 해준다.
#include <iostream>
#include <string>
int l;
long long sum;
const int M = 1234567891;
std::string str;
long long pow(int n, int i);
int main(void) {
std::cin >> l;
std::cin >> str;
int i = 0;
for (int n : str) {
sum += (n - 96) * pow(31, i);
sum = sum % M;
i++;
}
std::cout << sum;
}
long long pow(int n, int i) {
long long num = 1;
for (int k = 0; k < i; k++) {
num *= 31;
num %= M;
}
return num;
}반응형
'코딩 공부 > Baekjoon Problem Solving' 카테고리의 다른 글
| 백준 1978번 소수 찾기 (C++) (1) | 2025.07.14 |
|---|---|
| 백준 11866번 요세푸스 문제 0 (C++) (0) | 2025.07.07 |
| 백준 9012번 괄호 (C++) (1) | 2025.07.05 |
| 백준 1676번 팩토리얼 0의 개수(C++) (0) | 2025.04.26 |
| 백준 10845번 큐(C++) (0) | 2025.04.25 |
