๋ฌธ์ œ

Problem

https://www.acmicpc.net/problem/15829

ํ’€์ด

ํ•ด์‹ฑ ์นดํ…Œ๊ณ ๋ฆฌ ๋ฌธ์ œ ์ค‘ ๊ฐ€์žฅ ๋‚ฎ์€ ๋‚œ์ด๋„์˜ ๋ฌธ์ œ๋‹ค.

๋ฌธ์ œ์— ์ ํ˜€์žˆ๋Š” ์‹์„ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์ฒ˜์Œ์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ œ์ถœํ–ˆ๋‹ค.

1์ฐจ์‹œ๋„

import java.util.Scanner;

public class Main
{
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		final int r = 31, m = 1234567891;
		int res = 0,l = Integer.parseInt(scan.nextLine());
		String str = scan.nextLine();
		for(int i=0; i<l; i+=1){
		    int character = str.charAt(i) - 'a' + 1;
		    res += character*(int)(Math.pow(r,i))%m;
		}
		System.out.println(res);
	}
}

๋‹จ์ˆœ ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ ์‹œ๊ทธ๋งˆ ํ•ฉ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

First_Try

50์ ์ด ๋‚˜์™”๋‹ค. ๋ฌธ์ž์—ด ๊ธธ์ด L์ด 1โ‰คLโ‰ค5 ์‚ฌ์ด๋กœ ์ž…๋ ฅ๋˜์—ˆ์„๋•Œ๋Š” ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋‚˜, 1โ‰คLโ‰ค50์˜ ์ƒ๋Œ€์ ์œผ๋กœ ํฐ๊ฐ’์ด ๋“ค์–ด์™”์„๋•Œ๋Š” ์ •์ƒ์ ์ธ ๊ฐ’์ด ์ถœ๋ ฅ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์›์ธ์„ ์ฐพ๋˜์ค‘ ๋ฐฑ์ค€ ์งˆ๋ฌธ๊ฒŒ์‹œํŒ์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ์˜ ๋‹ต๋ณ€์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

์ž๋ฐ” ๊ธฐ์ค€ Math.pow() ๋งค์†Œ๋“œ๋Š” ๋ถ€๋™์†Œ์ˆ˜์  ์—ฐ์‚ฐ์„ ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ด ํด์ˆ˜๋ก ๋ถ€์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์„์ˆ˜ ์žˆ๋‹ค.

๋ถ€๋™ ์†Œ์ˆ˜์  ์—ฐ์‚ฐ?

์ผ๋‹จ ๋จผ์ € ๋ถ€๋™ ์†Œ์ˆ˜์  ์—ฐ์‚ฐ์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ณ ์ • ์†Œ์ˆ˜์ ๊ณผ ๋ถ€๋™ ์†Œ์ˆ˜์ ์— ๋Œ€ํ•œ ๊ฐœ๋…์˜ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๋จผ์ € 10์ง„์ˆ˜ ์†Œ์ˆ˜๋Š” 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ• ์ˆ˜ ์žˆ๋Š”๋ฐ ์˜ˆ๋ฅผ ๋“ค์–ด 0.5๋ฅผ 2์ง„์ˆ˜ ์†Œ์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด 0.5๋Š” \(2^{-1}\) ์ด๋ฏ€๋กœ 0.1์ด ๋œ๋‹ค. ๋˜ ์ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 0.25๋„ \(2^{-2}\) ์ด๋ฏ€๋กœ 0.01์ด ๋œ๋‹ค. ๊ทธ๋Ÿผ ๋งŒ์•ฝ์— 0.6์„ ์†Œ์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

0.10011001100110011001100110011001100110011001100110011โ€ฆ.

๋๋„ ์—†์ด ์ด์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ณ ์ •์†Œ์ˆ˜์ ์ด๋ƒ ๋ถ€๋™์†Œ์ˆ˜์ ์ด๋ƒ์— ๋”ฐ๋ผ์„œ ์†Œ์ˆ˜์˜ ํ‘œํ˜„๋ฐฉ์‹์ด ๋‹ฌ๋ผ์ง„๋‹ค.

  • ๊ณ ์ • ์†Œ์ˆ˜์ 

์ •์ˆ˜, ์†Œ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋น„ํŠธ์˜ ๊ฐฏ์ˆ˜์— ์ œํ•œ์ด ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ์œ„์™€ ๊ฐ™์€ ์†Œ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๋„ฃ๋Š”๋‹ค๊ณ  ํ• ๋•Œ ๋งŒ์•ฝ ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•์—์„œ ์‹ค์ˆ˜์˜ ํ‘œํ˜„ ๋น„ํŠธ๊ฐ€ 15bit๊ฐ€ ์ œํ•œ์ด ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด 0.6์€ 0.100110011001100 ๊นŒ์ง€๋งŒ ์ €์žฅ์ด ๋ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ๊ฒฝ์šฐ ๋‹น์—ฐํžˆ ๋’ค๋ถ€๋ถ„์ด ์ž˜๋ ค๋ฒ„๋ ธ์œผ๋‹ˆ ์ด ๋ณ€์ˆ˜์— ์žˆ๋Š” ์ˆ˜๋Š” ๋ณ„๋‹ค๋ฅธ ๋ณด์ •์ž‘์—…์ด ์—†๋‹ค๋ฉด ์ •ํ™•ํžˆ 0.6์„ ๊ฐ€๋ฆฌํ‚ค์ง€ ๋ชปํ•˜๊ฒŒ ๋ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ์‹ค์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋น„ํŠธ์˜ ์–‘์„ ๋Š˜๋ฆฌ๊ธฐ์—๋Š” ํ•œ์ •๋œ ๊ณต๊ฐ„์—์„œ ์ •์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋น„ํŠธ๋งˆ์ € ์ค„์–ด ์–ด๋–ป๊ฒŒ ํ•ด๋„ ์ •ํ™•ํ•œ ์ˆ˜์˜ ํ‘œํ˜„์ด ์–ด๋ ค์›Œ์ง„๋‹ค. ์ด๋Ÿฌํ•œ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด ๋ถ€๋™ ์†Œ์ˆ˜์ ์ด๋‹ค.

  • ๋ถ€๋™ ์†Œ์ˆ˜์ 

๋ถ€๋™ ์†Œ์ˆ˜์  ํ‘œํ˜„์€ ์‹ค์ˆ˜ ๋ถ€๋ถ„์„ ๋” ๋งŽ์ด ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ •์ˆ˜๋ถ€๋ถ„์„ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ตœ๋Œ€ํ•œ ๋‹จ์ˆœํ™” ์‹œํ‚จ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹จ์ˆœํ™”๋ฅผ ์‹œํ‚จ๋‹ค. (IEEE 754 ํ‘œ์ค€ ๊ธฐ์ค€)

  1. ๋จผ์ € ๋ถ€ํ˜ธ๋น„ํŠธ๋ฅผ ์„ค์ •(์–‘์ˆ˜ = 0 , ์Œ์ˆ˜ = 1)
  2. ์ •์ˆ˜๋ถ€๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด ์†Œ์ˆ˜์ ์„ ์ขŒ์ธก์œผ๋กœ ์ด๋™์‹œ์ผœ 1.xxx ํ˜•ํƒœ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋งŒ๋“ ๋‹ค. 0์ด๋ผ๋ฉด ์šฐ์ธก์œผ๋กœ ์ด๋™์‹œ์ผœ 1.xxx ํ˜•ํƒœ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋งŒ๋“ ๋‹ค.
  3. ์†Œ์ˆ˜์ ์„ ์˜ฎ๊ธฐ๊ธฐ์ „ ์ˆ˜์—์„œ 2๋ฅผ ๋ช‡๋ฒˆ ๊ณฑํ•ด์•ผ ํ•ด๋‹น์ˆ˜๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ๊ณ„์‚ฐ(์†Œ์ˆ˜์ ์„ ์˜ฎ๊ธด์ˆ˜์—์„œ ์›๋ž˜์ˆ˜๋ฅผ ๋‚˜๋ˆด์„๋•Œ ๊ฐ’)
  4. ๋‘ ์ˆ˜์˜ ์ฐจ์ด์— ๋Œ€ํ•œ ๊ฐ’์€ \(2^n\)ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋˜์–ด์ง€๋ฉฐ n์˜ ๊ฐ’์„ ์ง€์ˆ˜ ๋น„ํŠธ ๋ถ€์— ์ž…๋ ฅ
  5. 1.xxx ํ˜•ํƒœ๋กœ ๋ฐ”๊พผ ์†Œ์ˆ˜์˜ ๋‚˜๋จธ์ง€ xxx๋ถ€๋ถ„์„ ๊ฐ€์ˆ˜ ๋น„ํŠธ ๋ถ€๋ถ„์— ๋˜๋Š” ๋งŒํผ ์ตœ๋Œ€ํ•œ ์ž…๋ ฅ

IEEE 754 ๋ถ€๋™ ์†Œ์ˆ˜์  ํ‘œ์ค€

[1๋น„ํŠธ] [ 8๋น„ํŠธ ] [ 23๋น„ํŠธ ]
๋ถ€ํ˜ธ๋น„ํŠธ ์ง€์ˆ˜๋น„ํŠธ ๊ฐ€์ˆ˜ ๋น„ํŠธ

์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๊ณ ์ • ์†Œ์ˆ˜์ ์— ๋น„ํ•ด์„œ๋Š” ์กฐ๊ธˆ ๋” ์ •ํ™•ํ•œ ์‹ค์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ถ€๋™์†Œ์ˆ˜์ ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ •ํ™•ํ•œ ์†Œ์ˆ˜์ ์„ ํ‘œํ˜„ํ•˜์ง€๋Š” ๋ชปํ•œ๋‹ค.

๋ถ€๋™ ์†Œ์ˆ˜์  ์—ฐ์‚ฐ์˜ ๋ฌธ์ œ์ 

์‹ค์ˆ˜๋„ ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„์ด ๋˜์ง€ ์•Š๋Š”๋ฐ ๊ณ„์‚ฐ ํ–ˆ์„๋•Œ๋„ ์ •ํ™•ํ•œ ๋‹ต์ด ๋‚˜์˜ค์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฑด ๋„ˆ๋ฌด ๋‹น์—ฐํ•ด ๋ณด์ด์ง€๋งŒ ์ •์ˆ˜๋ฅผ ๋ถ€๋™ ์†Œ์ˆ˜์  ์—ฐ์‚ฐ์„ ํ–ˆ์„๋•Œ ์–ด๋–ค๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฑธ๊นŒ?

์˜ˆ๋ฅผ๋“ค์–ด ์ •์ˆ˜ 37๊ณผ 131์„ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ถ€๋™์†Œ์ˆ˜์  ๋ณ€ํ™˜ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•ด ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

[0][1111010][00101] โ‡’ 37
[์–‘์ˆ˜][2^5][์ •์ˆ˜๋ถ€๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์‹ค์ˆ˜ ๋ถ€๋ถ„]

[0][1111000][0000011] โ‡’ 131
[์–‘์ˆ˜][2^7][์ •์ˆ˜๋ถ€๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์‹ค์ˆ˜ ๋ถ€๋ถ„]

๋‘ ์ˆ˜๋ฅผ ๋ถ€๋™ ์†Œ์ˆ˜์  ์—ฐ์‚ฐ์„ ์ด์šฉํ•ด ๊ณฑํ•˜๋ฉด

[0][1110011][001011101111]
[์–‘์ˆ˜][2^12][์ •์ˆ˜๋ถ€๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์‹ค์ˆ˜ ๋ถ€๋ถ„]

์œ„์™€ ๊ฐ™์ด ๋‚˜์˜ค๊ณ  ๋‹ค์‹œ ์ •์ˆ˜๋กœ ์ „ํ™˜ํ•˜๋ฉด 4847์ด๋ผ๋Š” ๊ฐ’์ด ์ •์ƒ์ ์œผ๋กœ ๋‚˜์˜จ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.

๋ฌธ์ œ๋Š” ์—ฐ์‚ฐ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ€์ˆ˜๋น„ํŠธ๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฐ’์ด ๋‚˜์˜ค๋ฉด ๊ทธ๋•Œ๋ถ€ํ„ฐ ๋ฌธ์ œ๊ฐ€ ๋˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด 480,730๊ณผ 269,602๋ฅผ ๊ณฑํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž

480,730 = 1.110101010111011010 _ 2^18 = [0][1101101][110101010111011010]
269,602 = 1.000001110100100010 _ 2^18 = [0][1101101][000001110100100010]

์›๋ž˜ ๋‚˜์™€์•ผ๋˜๋Š” ์ œ๋Œ€๋กœ ๋œ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

129,605,769,460 = 1.111000101101000110110001100011110100 * 2^36

๊ทธ๋Ÿฌ๋‚˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๊ฐ€์ˆ˜๋น„ํŠธ๊ฐ€ ์ด 36๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ๋˜๋Š”๋ฐ IEEE 754 ํ‘œ์ค€์— ๋”ฐ๋ฅด๋ฉด ๊ฐ€์ˆ˜๋น„ํŠธ๋Š” 23๋น„ํŠธ๊นŒ์ง€๋งŒ ๋“ค์–ด๊ฐˆ์ˆ˜ ์žˆ๋‹ค.

์ด๋กœ์ธํ•ด ๊ฐ€์ˆ˜๋น„ํŠธ 32๋น„ํŠธ์ค‘ 23๋น„ํŠธ๊นŒ์ง€๋งŒ ์ž…๋ ฅ์ด ๋˜์–ด์ง€๊ณ  ๋‚˜๋จธ์ง€ 13๋น„ํŠธ๋Š” ์†Œ๋ฉธ๋˜์–ด์ง„๋‹ค. ์ด๋กœ์ธํ•ด ์‹ค์ œ๋กœ ์ €์žฅ๋˜๋Š” ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

15,821,016 = 1.11100010110100011011000 * 2^23 = [0][1101000][11100010110100011011000]

๋”ฐ๋ผ์„œ ์›๋ž˜ \(480730\times 269602 = 129605769460\) ์ด์—ฌ์•ผ ํ•˜์ง€๋งŒ ์ •์ž‘ ๋ถ€๋™์†Œ์ˆ˜์  ์—ฐ์‚ฐ์„ ์ด์šฉํ•œ๋‹ค๋ฉด \(480730\times 269602 = 15821016\) ๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ž๋ฐ” ๋‚ด๋ถ€ ๋งค์†Œ๋“œ ์ค‘ Math.pow() ํ•จ์ˆ˜๋Š” ๋ถ€๋™ ์†Œ์ˆ˜์  ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•˜๊ณ  ๊ฐ’์ด ์ปค์งˆ ์ˆ˜๋ก ๋ถ€์ •ํ™•ํ•œ ๊ฐ’์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์— 1โ‰คLโ‰ค50 ์ผ๋•Œ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ๋ชปํ•œ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Math.pow()๋ฅผ ๋Œ€์ฒดํ• ๋งŒํ•œ ๋ถ€๋™ ์†Œ์ˆ˜์  ์—ฐ์‚ฐ์„ ํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ๋งค์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ์ง์ ‘ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด ์ผ์ผํžˆ ๊ณฑ์…ˆ์„ ์ง„ํ–‰ํ•ด Math.pow() ๋งค์†Œ๋“œ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๋งค์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ  ์ˆ˜์ •ํ•˜์—ฌ ์ œ์ถœํ•œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

import java.util.Scanner;

public class Main
{
	//Math.pow()ํ•จ์ˆ˜๋ฅผ ๋Œ€์ฒด
    static long power(int r, int x) {
        long res = 1;
        for(int i=0; i<x; i+=1) res *= r;
        return res;
    }
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		final int r = 31, m = 1234567891;
		int l = Integer.parseInt(scan.nextLine());
		// int ๋Œ€์‹  long ์ž๋ฃŒํ˜• ํ™œ์šฉ
		long res = 0;
		String str = scan.nextLine();
		for(int i=0; i<l; i+=1){
		    int character = str.charAt(i) - 'a' + 1;
		    res += character*power(r,i)%m;
		}
		System.out.println(res);
	}
}

๋Œ€์ฒด ๋งค์†Œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด ์‹œ๊ทธ๋งˆ ํ•ฉ์„ ๊ณ„์‚ฐํ•˜๋ฉด์„œ ๋ˆ„์ ๋˜๋Š” ๊ฐ’์ด int ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•  ๊ฒƒ ๊ฐ™์•„ ๋” ํฐ ์ •์ˆ˜ ์ž๋ฃŒํ˜•์ธ long ์„ ํ™œ์šฉํ•˜์˜€๋‹ค.

์ž๋ฃŒํ˜• ๋น„๊ต

int โ‡’ -2,147,483,648 ~ 2,147,483,647
long โ‡’ -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

2์ฐจ์‹œ๋„ ๊ฒฐ๊ณผ

Second_Try

์—ฌ์ „ํžˆ ํฐ์ˆ˜๋ฅผ ๋„ฃ์—ˆ์„๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

long๋ณด๋‹ค ๋” ํฐ ์ž๋ฃŒํ˜•์ด ์ž๋ฐ”์— ํ˜น์‹œ๋‚˜ ์žˆ๋Š”์ง€ ์ฐพ์•„๋ดค๋‹ค.

์žˆ์—ˆ๋‹ค.

BigInteger ์ž๋ฃŒํ˜•

๋ณ„๋„๋กœ import๋ฌธ์œผ๋กœ ๋กœ๋“œํ•ด์ค˜์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒํ˜•์ด๋‹ค.(import java.math.BigInteger)

์ด ์ž๋ฃŒํ˜•์€ ๋‹ค๋ฅธ ์ •์ˆ˜ ์ž๋ฃŒํ˜•๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”๋„ ๋ณ„๋„์˜ BigInteger ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ง„ํ–‰ํ•˜๊ณ ,

์‚ฌ์น™์—ฐ์‚ฐ ๋˜ํ•œ ๋ณ„๋„์˜ ๋งค์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉฐ, ๋งค์†Œ๋“œ๋กœ ๋„˜๊ฒจ์ง€๋Š” ์‚ฌ์น™์—ฐ์‚ฐํ•  ์ˆ˜๋Š” ๋ชจ๋‘ String ํ˜•ํƒœ๋กœ ๋„˜๊ฒจ์ง„๋‹ค. ์•„๋งˆ String ํ˜•ํƒœ๋กœ ๋„˜๊ฒจ๋ฐ›์•„ ๋‚ด๋ถ€ ๋งค์†Œ๋“œ์—์„œ ๋ณ„๋„์˜ ๋ณ€ํ™˜ / ๋ถ„ํ•  ์ž‘์—…์„ ํ†ตํ•˜์—ฌ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

BigInteger์˜ ๋ฒ”์œ„๋Š” ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•๊ณผ ๋‹ฌ๋ฆฌ 70๋ฐ”์ดํŠธ๊นŒ์ง€์˜ ์ˆ˜๋ฅผ ๋ฐ›์„์ˆ˜ ์žˆ์–ด์„œ ์‚ฌ์‹ค์ƒ ๋Œ€๋ถ€๋ถ„์˜ ํฐ์ˆ˜๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ํฐ ์ง€์žฅ์ด ์—†์–ด ๋ณด์ธ๋‹ค.

์ด ์ž๋ฃŒํ˜•์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์›๋ž˜ long ์ž๋ฃŒํ˜•์„ ํ™œ์šฉํ•œ ๋ˆ„์ ๋ณ€์ˆ˜๋ฅผ BigInteger๋กœ ๋Œ€์ฒดํ•˜์˜€๋‹ค.

์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

import java.util.Scanner;
import java.math.BigInteger;

public class Main
{
    static BigInteger power(int r, int x) {
        BigInteger res = new BigInteger("1");
        for(int i=0; i<x; i+=1) res = res.multiply(new BigInteger(Integer.toString(r)));
        return res;
    }
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		final int r = 31, m = 1234567891;
		int l = Integer.parseInt(scan.nextLine());
		BigInteger res = new BigInteger("0");
		String str = scan.nextLine();
		for(int i=0; i<l; i+=1){
		    BigInteger character = new BigInteger(Long.toString(str.charAt(i) - 'a' + 1));
		    res = res.add(character.multiply(power(r,i)));
		}
		res = res.remainder(new BigInteger(Integer.toString(m)));
		System.out.println(res);
	}
}

์ตœ์ข… ์‹œ๋„

Final_Try

๋“œ๋””์–ด ์ •๋‹ต์ด๋‹ค.

์•Œ์ˆ˜ ์žˆ๋Š”๊ฒƒ

  1. ์†Œ์ˆ˜๋Š” 2์ง„์ˆ˜์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ๋ ๋•Œ ์ž๋ฃŒํ˜•์ด ํด์ˆ˜๋ก ๋” ๋งŽ์€ ๋น„ํŠธ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ์–ด ๋” ๊ทผ์ ‘ํ•œ ํ˜•ํƒœ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, 0.5, 0.75์ฒ˜๋Ÿผ ๋น„ํŠธ์˜ ๊ธธ์ด๊ฐ€ ๋”ฑ ๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ• ์ˆ˜ ์—†๋‹ค.
  2. 1๋ฒˆ์˜ ์ด์œ ๋กœ ์ธํ•ด ๋ถ€์ •ํ™•ํ•œ ์†Œ์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ์ด๋ฅผ ์—ฐ์‚ฐ์— ์ด์šฉํ•˜๋ฉด์„œ ๊ฒฐ๊ตญ ๋ถ€์ ์ ˆํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.
  3. ๊ฐ™์€ ์ž๋ฃŒํ˜• ์ด๋”๋ผ๋„ ์†Œ์ˆ˜๋ฅผ ์ €์žฅํ• ๋•Œ ๊ณ ์ • ์†Œ์ˆ˜์  ๋ฐฉ์‹ ๋ณด๋‹ค๋Š” ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฐฉ์‹์„ ํ™œ์šฉํ–ˆ์„๋•Œ ๋” ๋งŽ์€ ๊ฐ€์ˆ˜๋น„ํŠธ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด ๋” ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. ํฐ ์ •์ˆ˜์˜ ์—ฐ์‚ฐ์„ ๋ถ€๋™์†Œ์ˆ˜์  ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์ง„ํ–‰ํ• ๊ฒฝ์šฐ ๊ฐ€์ˆ˜๋น„ํŠธ๋ฅผ ์ดˆ๊ณผํ•œ ๊ธธ์ด์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๊ฒฐ๊ณผ์˜ ์ผ๋ถ€๋น„ํŠธ๊ฐ€ ์†์‹ค๋œ ์ƒํƒœ๋กœ ๋ฐ˜ํ™˜๋จ์œผ๋กœ์จ ์ •ํ™•ํ•œ ์—ฐ์‚ฐ์„ ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ํฐ์ˆ˜์˜ ์—ฐ์‚ฐ์€ ์™ ๋งŒํ•ด์„œ๋Š” ๋ถ€๋™์†Œ์ˆ˜์  ์—ฐ์‚ฐ์— ํ™œ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  5. ์—ฌ๊ธฐ์—์„œ๋Š” ์„œ์ˆ ํ•˜์ง€ ๋ชปํ•˜์˜€์œผ๋‚˜, ์—ฌ๋Ÿฌ ํ•ด์‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฒฝํ—˜ํ•˜๊ณ  ๋ฐฐ์šฐ๊ฒŒ ๋˜์—ˆ์Œ.