import java.io.*;
import java.math.BigInteger;
public class Problem15829 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int l = Integer.parseInt(br.readLine()); // 문자열 길이
String w = br.readLine(); // 문자열
BigInteger r = new BigInteger("31"); // r 고정
BigInteger sum = BigInteger.ZERO; // sum 초기화
for (int i = 0; i < l; i++) {
sum = sum.add(r.pow(i).multiply(BigInteger.valueOf((int) w.charAt(i) - 96)));
}
System.out.println(sum.mod(BigInteger.valueOf(1234567891)));
}
}
- 1 ≤ L ≤ 50
키 포인트
문자열 길이 L이 50인 경우 숫자가 아득히 커지므로 BigInteger를 사용해야 한다. BigInteger 클래스는 불변 객체이기 때문에 = 연산자를 사용해 초기화할 수 없다. 따라서 BigInteger.ZERO로 초기화한다.
BigInteger bigInt = 0; // 불가능
BigInteger bigInt = new BigInteger("0"); // 가능
BigInteger bigInt = BigInteger.ZERO; // 가능 (권장하는 방법)
728x90
'프로그래밍 > 풀었어, 백준' 카테고리의 다른 글
[Java] 백준 11650번: 람다 표현식 (1) | 2025.01.16 |
---|---|
[Java] 백준 2609번: 유클리드 호제법 (1) | 2025.01.15 |
[Java] 백준 2775번: 2차원 배열 (0) | 2025.01.14 |
[Java] 백준 2750번: 오름차순 정렬하기 (0) | 2025.01.09 |
[Java] 백준 2839번: 반복문에 이름 붙이기 (0) | 2025.01.08 |