Java

백준 26008번: 해시 해킹 문제

openDeveloper 2023. 3. 16. 23:35

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