-
[Java] BOJ 1394 암호개발자 취업/코딩테스트 준비 2023. 6. 12. 23:32반응형
1394번: 암호
첫 번째 줄에는 암호로 사용할 수 있는 문자가 공백 없이 주어지고, 두 번째 줄에는 컴퓨터의 암호가 주어진다. 암호에 사용할 수 있는 문자의 종류는 최대 100가지이고, 공백은 사용할 수 없다.
www.acmicpc.net
테스트 코드
abcde dcb 4 * 5^2 + 3 * 5^1 + 2 * 5^0 = 117
정답 코드
- map에 문자 첫번째 위치 저장
- arr에는 N제곱 modular 값 저장
import java.io.*; import java.util.*; public class Main { static BufferedReader br; static BufferedWriter bw; static StringTokenizer st; static String str1, str2; static long[] arr; static HashMap<Character, Integer> map; static final int MOD_NUMBER = 900_528; public static void main(String[] args) throws IOException { br = new BufferedReader(new InputStreamReader(System.in)); bw = new BufferedWriter(new OutputStreamWriter(System.out)); str1 = br.readLine(); map = new HashMap<>(); for (int i = 0; i < str1.length(); i++) { char c = str1.charAt(i); if (!map.containsKey(c)) { map.put(c, i + 1); } } long tmp = 1; arr = new long[1_000_001]; arr[0] = tmp; for (int i = 1; i < 1_000_001; i++) { tmp *= (str1.length() % MOD_NUMBER); tmp %= MOD_NUMBER; arr[i] = tmp; } long ans = 0; str2 = br.readLine(); for (int i = 0; i < str2.length(); i++) { char c = str2.charAt(i); int index = str2.length() - i - 1; ans += (map.get(c) * arr[index]) % MOD_NUMBER; ans %= MOD_NUMBER; } System.out.println(ans); } }
'개발자 취업 > 코딩테스트 준비' 카테고리의 다른 글
[Java] BOJ 20157 화살을 쏘자! (0) 2023.06.13 [Java] BOJ 1515 수 이어 쓰기 (0) 2023.06.13 [Java] BOJ 1897 토달기 (0) 2023.06.12 [Java] BOJ 19583 싸이버개강총회 (0) 2023.06.11 [Java] BOJ 17479 정식당 (0) 2023.06.11