Problem Solving/Baekjoon

[백준] 9322 철벽 보안 알고리즘 - Data Structure / Java

graycode 2023. 3. 20. 20:17

 문제 링크

 

9322번: 철벽 보안 알고리즘

소희는 공개키와 개인키 한 쌍으로 보안을 유지하는 것이 매우 불편하다고 생각했다. 그래서 소희는 공개키만을 이용하는 암호화 체계를 개발했다. 이를 "철벽 보안 알고리즘"이라고 부르기로

www.acmicpc.net

 

 풀이 과정

제 1 공개키의 각 단어의 순서를 map에 저장한다.

제 2 공개키를 입력받을 때, 각 단어의 제 1 공개키 단어와 대응되는 순서 값을 배열에 저장한다.

 

다음 평문을 입력받을 때, 배열에 저장된 단어 배치 순서를 역으로 참조해,

각각의 단어를 정답 배열에 저장 및 공백으로 구분해 출력한다.

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class Main {

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

        int tc = Integer.parseInt(br.readLine());

        StringBuilder sb = new StringBuilder();
        while (tc-- > 0) {
            int n = Integer.parseInt(br.readLine());

            Map<String, Integer> map = new HashMap<>();
            st = new StringTokenizer(br.readLine());
            for (int i = 0; i < n; i++)
                map.put(st.nextToken(), i);

            int[] pattern = new int[n];
            st = new StringTokenizer(br.readLine());
            for (int i = 0; i < n; i++)
                pattern[i] = map.get(st.nextToken());

            String[] res = new String[n];
            st = new StringTokenizer(br.readLine());
            for (int i = 0; i < n; i++)
                res[pattern[i]] = st.nextToken();

            for (String s : res)
                sb.append(s).append(" ");
            sb.append("\n");
        }

        bw.write(sb.toString());
        bw.flush();
    }

}