Baekjoon - 15829

Tadap·2023년 9월 19일
0

Baekjoon

목록 보기
21/94

문제

Solved.ac Class 2++

1차시도

public class Main {
	static final int r = 31;
	static final int m = 1234567891;
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int sum = 0;

		int size = Integer.parseInt(br.readLine());
		String string = br.readLine();

		for (int i = 0; i < size; i++) {
			sum += (int)((string.charAt(i) - 96) * Math.pow(r, i));
		}

		System.out.println(sum);

	}
}

부분성공

n차시도

아마 mod 부분을 적용하지 않은 것 같다

  1. r^50 승이면 매우 큰 수이다. 따라서 거듭제곱에 항상 mod를 해줘야 한다
  2. 추가적으로, 전체 합에도 mod를 해줘야 한다 그걸 빼먹어서 많이 시도했다.
public class Main {
	static final int r = 31;
	static final int m = 1234567891;
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		long sum = 0;
		long pow = 1;

		int size = Integer.parseInt(br.readLine());
		String string = br.readLine();

		for (int i = 0; i < size; i++) {
			sum += ((string.charAt(i) - 96) * pow);
			pow = (pow * r) % m;
		}
		System.out.print(sum % m);
	}
}

성공

0개의 댓글