μ΅œλŒ€ 1 λΆ„ μ†Œμš”

πŸ“ [B2_15829] Hashing

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Main {
	static final int M = 1234567891;
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		// **** input start ****
		int N = Integer.parseInt(br.readLine());

		String str = br.readLine();

		long sum = 0;
		long r = 1;
		for(int i=0; i<N;i++) {
			sum += ((str.charAt(i)-96) * r) % M;
			r = (r * 31) % M;
		}

		// **** input end ****
		System.out.println(sum%M);
	}
}

πŸ€” λ‚˜μ˜ 생각

μ²˜μŒμ— κ·Έλƒ₯ Math.pow() 둜 ν’€μ—ˆλŠ”λ° 50점이 λ‚˜μ™€μ„œ 문제λ₯Ό μ œλŒ€λ‘œ λ΄€λ‹€.. γ…‹γ…‹
문제λ₯Ό λ³΄λ‹ˆ ν¬μΈνŠΈλŠ” %M 인 것 κ°™λ‹€.
λͺ¨λ“ˆλŸ¬μ—°μ‚°μ„ μ΄μš©ν•΄ 식을 μ „κ°œν•  수 μžˆλ‹€.
(A+B)mod M = ((A mod M) + (B mod M)) mod M
κ·Έλž˜μ„œ λͺ¨λ“  연산에 mod M을` ν•΄μ£Όκ³ 
rκ³Ό sum λ³€μˆ˜λŠ” long을 μ‚¬μš©ν•˜λŠ”κ²ƒ !
μ™œλƒλ©΄ 50κΉŒμ§€ κ°„λ‹€λ©΄ λ²”μœ„λ₯Ό ν›Œμ© λ„˜μ–΄λ²„λ¦¬κΈ° λ•Œλ¬Έμ— long 도 ν•„μˆ˜ 이닀.