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
- 8959번
- 10250번
- 2231번
- 3052번
- 5597번
- Java
- 1436번
- 자바
- 2292번
- 2798번
- 1978번
- 11718번
- 2675번
- 2744번
- 2439번
- 10845번
- 15829번
- 11654번
- 백준
- 브루트포스트
- 팰린드롬수
- 15552번
- 31403번
- 10818번
- 2920번
- 4153번
- 브루트포스
- 10828번
- 코딩
- 1259번
Archives
- Today
- Total
서비스 기획자 기록
[백준] 15829번 : Hashing - Java 본문
https://www.acmicpc.net/problem/15829
- 문제
- 풀이
- 조건에 맞춰서 해시함수를 작성한되, Large 케이스에 유의한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int L = sc.nextInt();
String s = sc.next();
long arr[] = new long [L];
long square = 1;
long sum = 0;
for (int i = 0; i < L; i++) {
int tmp = (s.charAt(i) - 'a') + 1;
arr[i] = tmp * square;
square = (square * 31) % 1234567891;
}
for (int j = 0; j < L; j++) {
sum = (sum + arr[j]) % 1234567891;
}
System.out.println(sum);
sc.close();
}
} num /= 10; } if (sum + i == N) { result = i; break; } } System.out.println(result); sc.close(); }}<\/code><\/pre>
문자열의 길이에 맞는 배열을 생성한다. 단 큰 숫자를 받기 위해 long타입을 이용한다.
해시 함수 조건에 맞게 코드를 작성하되, square에 주의한다.
제곱이 될 수록 수가 커져 long의 범위도 벗어나므로 제곱수에도 M인 1234567891을 나눠준다.
※ A+B = C라고 가정할 때, (A+B) % M = C % M을 이용한 것이다.
'백준' 카테고리의 다른 글
[백준] 10845번 : 큐 - Java (1) | 2025.01.19 |
---|---|
[백준] 1259번 : 팰린드롬수 - Java (2) | 2025.01.16 |
[백준] 2231번 : 분해합 - Java (1) | 2025.01.16 |
[백준] 2798번 : 블랙잭 - Java (0) | 2025.01.10 |
[백준] 2292번 : 벌집 - Java (0) | 2025.01.10 |