서비스 기획자 기록

[백준] 15829번 : Hashing - Java 본문

백준

[백준] 15829번 : Hashing - Java

주니5947 2025. 1. 16. 17:01

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