끄적끄적 코딩
article thumbnail
Published 2023. 8. 9. 02:00
[Java] 백준 1394번 암호 알고리즘

문자가 주어지고 암호를 찾는 규칙이 있을때 암호를 몇번만에 찾는지 구하는 문제입니다.

문자는 최대 100가지이며, 영어 대,소문자는 52가지이므로 48가지의 문자가 더 있다고 생각했습니다.
배열에 해당문자가 쓰여진 순서를 기록했습니다.

배열 인덱스에 매핑하는것은 아스키코드를 참고했습니다.

사용 될 수 있는 문자 중 가장 작은 수의 문자는 '!' 입니다.

int index = s.charAt(i) - '!';
arr[index] = i;


매핑한 후에 수학 계산을 해주었습니다.

for (int i = 0; i < code.length(); ++i) {
  int index = code.charAt(i) - '!';

  result *= size;
  result += arr[index];
  result %= 900528;
}


계산한 결과를 출력해주었습니다.

import java.util.*;
import java.io.*;

public class Main {
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    String s = br.readLine();
    String code = br.readLine();
    int[] arr = new int[200];
    int result = 0;
    int size = s.length();

    for (int i = 0; i < s.length(); ++i) {
      int index = s.charAt(i) - '!';
      if (arr[index] == 0) {
        arr[index] = i + 1;
      }
    }

    for (int i = 0; i < code.length(); ++i) {
      int index = code.charAt(i) - '!';

      result *= size;
      result += arr[index];
      result %= 900528;
    }

    bw.write(result + "\n");
    bw.close();
  }
}

검색 태그