https://www.acmicpc.net/problem/9322
9322번: 철벽 보안 알고리즘
소희는 공개키와 개인키 한 쌍으로 보안을 유지하는 것이 매우 불편하다고 생각했다. 그래서 소희는 공개키만을 이용하는 암호화 체계를 개발했다. 이를 "철벽 보안 알고리즘"이라고 부르기로
www.acmicpc.net
단어가 총 1000개 이하이므로 제1 공개키와 제2 공개키, 암호문을 입력받은 뒤, 제1 공개키와 제2 공개키를 비교하면서 암호문을 특정 순서대로 출력한다면 시간 제한 이내에 답을 출력할 수 있다. 또, 제1 공개키를 입력받아 map에 저장한 뒤 제2 공개키를 이용해 암호문의 복호 순서를 저장한 뒤 암호문을 입력받아 구한 순서대로 출력하는 경우에도 시간 제한 이내에 답을 출력할 수 있다.
- 공개키 비교
#include <iostream>
#include <string>
using namespace std;
#define MAX_N 1000
void test_case() {
int N;
// key1: 제1 공개키, key2: 제2 공개키, code: 암호문
string key1[MAX_N], key2[MAX_N], code[MAX_N];
cin >> N;
// 공개키와 암호문을 단어의 배열로 저장
for (int i = 0; i < N; i++) cin >> key1[i];
for (int i = 0; i < N; i++) cin >> key2[i];
for (int i = 0; i < N; i++) cin >> code[i];
// 제1 공개키와 제2 공개키를 비교해 출력 순서를 계산
for (int i = 0; i < N; i++) for (int j = 0; j < N; j++)
if (key1[i] == key2[j]) {
// 제1 공개키 순서로 입력받은 암호문을 제2 공개키 순서로 출력
cout << code[j] << ' ';
break;
}
// 개행 문자를 출력하여 출력을 종료
cout << '\n';
}
int main() {
// 입출력 속도 향상
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T;
// 테스트 케이스의 수를 입력받고 각 테스트 케이스를 실행
for (cin >> T; T--; ) test_case();
return 0;
}
- map
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
#define MAX_N 1000
void test_case() {
// N: 단어의 개수, ord[i]: i번째 암호문의 복호문에서의 위치
int N, ord[MAX_N] = { 0, };
// str: 암호 순서를 계산할 때 사용할 변수, code: 암호문
string str, code[MAX_N];
// m[i]: i번째 암호 예제
unordered_map<string, int> m;
// 단어의 개수를 입력받은 뒤
cin >> N;
// 암호 예제의 각 단어 순서를 저장한 뒤
for (int i = 0; i < N; i++) {
cin >> str;
m[str] = i;
}
// 복호 예제를 이용해 암호문 -> 복호문 순서를 저장
for (int i = 0; i < N; i++) {
cin >> str;
ord[i] = m[str];
};
// 암호문을 복호문 순서로 저장한 뒤 순서대로 출력
for (int i = 0; i < N; i++) cin >> code[ord[i]];
for (int i = 0; i < N; i++) cout << code[i] << (i < N - 1 ? ' ' : '\n');
}
int main() {
// 입출력 속도 향상
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T;
// 테스트 케이스의 수를 입력받고 각 테스트 케이스를 실행
for (cin >> T; T--; ) test_case();
return 0;
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
9461번: 파도반 수열 (0) | 2021.12.28 |
---|---|
9375번: 패션왕 신해빈 (0) | 2021.12.28 |
9252번: LCS 2 (0) | 2021.12.28 |
9251번: LCS (0) | 2021.12.28 |
9205번: 맥주 마시면서 걸어가기 (0) | 2021.12.28 |