https://www.acmicpc.net/problem/26008
26008번: 해시 해킹
첫째 줄에 비밀번호의 길이 $N$과 문자 종류의 개수 $M$, 정수 $A$가 주어진다. ($1 \le N, M, A \le 5\,000\,000$) 둘째 줄에 재현이가 알아낸 해시값 정수 $H$가 주어진다. ($0 \le H < M$)
www.acmicpc.net
풀이 접근법 : 처음 문제를 봤을 때 아래 식을 보고 N, M , A 값을 받아 for문을 돌려 입력으로 주어진 해쉬값만 비교해보려고 했었는데, 입력으로 들어오는 값이 500000인 것을 보고, mod 연산을 사용해 식을 줄일 수 있지 않을까를 생각하였다.
입력 값을 가지고 테스를 해보니 mod 연산이 분배 법칙이 되는거까지는 파악했지만.... 더 이상 진도가 나가지 않았다.

https://nukoori.tistory.com/40
[백준] 26008 해시해킹
문제 입력 출력 코드( python ) n,m,a = map(int, input().split()) print(pow(m, n-1, 1000000007)) 코드( java ) import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long answer = 1L; in
nukoori.tistory.com
결국 위 블로그 글을 보고 풀이에 대해 조금이나마 이해할 수 있었다. 시간이 나면 다시 풀어봐야겠다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long answer = 1L;
int n = sc.nextInt();
int m = sc.nextInt();
int a = sc.nextInt();
int h = sc.nextInt();
for(int i = 0; i < n-1; i ++){
answer = (answer * m)%1000000007;
}
System.out.println(answer);
}
}
'Java' 카테고리의 다른 글
프로그래머스: 프린터 (0) | 2023.03.18 |
---|---|
백준 1158번: 요세푸스 문제 (0) | 2023.03.18 |
[Java] 백준 10818번: 최소, 최대 (0) | 2023.03.15 |
백준 1021번: 회전하는 큐 (0) | 2023.03.14 |
백준 25556번: 포스택 문제 (2) | 2023.03.14 |