๋ฌธ์
๋ฌธ์ ๋งํฌ https://www.acmicpc.net/problem/15829
- r์ ๊ฐ์ 26๋ณด๋ค ํฐ ์์์ธ 31๋ก ํ๊ณ M์ ๊ฐ์ 1234567891๋ก ํ๋ค.
- ์ ์์ ํตํด ์ฃผ์ด์ง ๋ฌธ์์ด์ ํด์ ๊ฐ์ ๊ณ์ฐํ์์ค.
- ์ฒซ ์ค์๋ ๋ฌธ์์ด์ ๊ธธ์ด L์ด ๋ค์ด์จ๋ค. ๋์งธ ์ค์๋ ์๋ฌธ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ๋ค์ด์จ๋ค.
- ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๋ฌธ์์ด์ ๋ชจ๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ๊ตฌ์ฑ๋์ด ์๋ค.
- ๋ฌธ์ ์์ ์ฃผ์ด์ง ํด์ํจ์์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ฌธ์์ด์ ์ฌ์ฉํด ๊ณ์ฐํ ํด์ ๊ฐ์ ์ ์๋ก ์ถ๋ ฅํ๋ค.
์์ด๋์ด
- ์์ด์ ์๋ฌธ์๋ฅผ ์์คํค์ฝ๋๋ก ๋ณํ์์ผ ํด๋น ์์คํค์ฝ๋์ ํด์ ๊ฐ์ ๋งค์นญ์์ผ์ ์์คํค์ฝ๋๋ฅผ key๊ฐ, ํด์ ๊ฐ์ value๊ฐ์ผ๋ก ์ฌ์ฉํ๋ HashMap์ ์ฌ์ฉํ๋ฉด ๋๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๊ฒช์ ์ํ์ฐฉ์ค
- ์ฒ์์ 50์ ์ด ๋์๋ค... ๋จธ๊ฐ ๋ฌธ์ ์ธ๊ฐ ํ๋๋ ๋ฌธ์์ด ๊ธธ์ด๊ฐ ์ปค์ง์๋ก 31์ ์ ๊ณฑ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ปค์ ธ์ ์ค๋ฒํ๋ก์ฐ๊ฐ ์๊ฒจ ๋๋จธ์ง 50์ ์ ๋ชป๋ฐ์๊ฑฐ์๋ค.
- ๊ทธ๋์ ์ฒ์์๋ Math.pow๋ฅผ ์จ์ ์ ๊ณฑ์๋ฅผ ๊ณ์ฐํ์ง๋ง for๋ฌธ์ ํตํด 31์ ์ผ์ผ์ด ๊ณฑํด์ฃผ๋ฉด์ 1234567891์ ๋๋ ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ค.
- ๋ค์๋ถํฐ ์ค๋ฒํ๋ก์ฐ๋ ์๊ฐํ๊ธฐ..! ๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ๋ ์กฐ๊ธ ๋ ๊ผผ๊ผผํ ์ฝ๊ธฐ.. (์ฒ์์ 1234567891 ๋๋๋๊ฑธ ๋นผ๋จน์๋ค..ใ )
์ฝ๋
import java.io.*;
import java.util.*;
public class BOJ15829 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String s = br.readLine();
// ํด์ ๊ฐ ์ ์ฅํ ๋ฐฐ์ด
HashMap<Integer, Integer> hash = new HashMap<Integer, Integer>(26);
int cnt = 1;
// ์๋ฌธ์ ์์คํค์ฝ๋๊ฐ 97 ~ 122
// ์์คํค์ฝ๋๋ง๋ค ํด์ํจ์ ๊ฐ ์ ์ฅ
for(int i = 97; i <= 122; i++){
hash.put(i, cnt);
cnt = cnt + 1;
}
int hash_cnt = 0;
long result = 0;
for(int i = 0; i < s.length(); i++){
// i๋ฒ์งธ ๋ฌธ์๋ฅผ ์์คํค์ฝ๋๋ก ๋ณํ
int c = (int)s.charAt(i);
// ๋ณํํ ์์คํค์ฝ๋๋ฅผ key ๊ฐ์ผ๋ก ํด๋น ํด์ ๊ฐ์ธ value๋ฅผ ์ฐพ์
int h = hash.get(c);
long po = 1;
// ํด์ ๊ฐ * 31^(์ซ์ ํด๋น ์๋ฒ(0๋ถํฐ ์์)
for(int j = 0; j < hash_cnt; j++){
// 31์ ๊ณ์ ๊ณฑํด์ค ํ, ์ค๋ฒํ๋ก์ฐ๊ฐ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด
// 1234567891๋ก ๋๋ ๋๋จธ์ง
po = (po * 31) % 1234567891;
}
// ๋์จ 31 ์ ๊ณฑ๊ฐ๊ณผ ํด์ ๊ฐ์ ๊ณฑํด์ค
po = h * po;
// ๋ํ์๋ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ ์ ์์ผ๋ฏ๋ก 1234567891๋ก ๋๋ ์ค
result = (result + po) % 1234567891;
// ์ซ์ ์๋ฒ + 1
hash_cnt = hash_cnt + 1;
}
System.out.println(result);
}
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] BOJ 1546 ํ๊ท (2) | 2024.07.11 |
---|---|
[Java] BOJ 1259 ํฐ๋ฆฐ๋๋กฌ์ (0) | 2024.07.11 |
[Java] BOJ 2798 ๋ธ๋์ญ (0) | 2024.07.10 |
[Java] BOJ 2292 ๋ฒ์ง (0) | 2024.07.10 |
[Java] BOJ 2231 ๋ถํดํฉ (0) | 2024.07.10 |