백준 9322 철벽보안 알고리즘(구현)

문제에서 공개키 1,2와 암호키로 구분되어 있기때문에, 공개키 1,2에 대한 인덱스의 위치만 알게되면 암호키로 평문을 복구할 수 있게 된다.

테스트케이스1
A B C D
D A B C

의 경우에서 옮겨진 인덱스를 확인하면

0 1 2 3
3 0 1 2

가 된다. 따라서 이 인덱스를 MAP에 담아주고, key 값을 불러올 때 value의 값에 따라 평문에 붙여주면 된다.

암호문이 C B A P (3 0 1 2)의 순이므로, 평문은 B A P C (0 1 2 3)이 되어야 한다.

import java.util.*;

public class Main {
    public static void main (String[]args) {
        Scanner scanner = new Scanner(System.in);
        int test = scanner.nextInt();

        for(int t=0; t<test; t++){
            int n = scanner.nextInt();
            Map<Integer,Integer> map = new HashMap<>();     //map<in1 word idx, in2 word idx>
            String[] s1 = new String[n];
            String[] s2 = new String[n];
            String[] pass = new String[n];
            String res = "";

            for(int i=0; i<n; i++){
                s1[i] = scanner.next();
            }
            for(int i=0; i<n; i++){
                s2[i] = scanner.next();
            }
            for(int i=0; i<n; i++){
                pass[i] = scanner.next();
            }

            for(int i=0; i<n; i++){
                for(int j=0; j<n; j++){
                    if(s1[i].equals(s2[j]))
                        map.put(i,j);
                }
            }

            for(Integer i:map.values()){
                res += (pass[i] + " ");
            }
            System.out.println(res);
        }
    }
}

좋은 웹페이지 즐겨찾기