코딩로그
[백준/BOJ/C++] 11575번 Affine Cipher 본문
[문제]
서쪽나라에서 특수훈련을 받은 정은이는 동쪽나라로 침투를 하게 되었다. 뛰어난 스파이였던 정은이는 동쪽나라의 정보를 입수하게 되었고 정보를 안전하게 서쪽나라로 전달하기 위해 아핀 암호(Affine Cipher)를 이용하기로 하였다.
아핀 암호는 다음과 같은 식을 통해 구할 수 있다.
E(X) = (aX + b) mod 26
A부터 Z까지의 알파벳을 차례대로 0, 1, 2, ... , 25 라고 하자. a = 3이고, b = 1인 경우에 알파벳 A를 아핀 암호식에 대입하면 E(0) = (3 × 0 + 1) mod 26 이 되어 암호화된 결과는 B가 된다.
a와 b, 그리고 알파벳 대문자로만 구성된 평문이 주어졌을 때, 이를 암호문으로 치환하는 프로그램을 작성하라.
[입력]
입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 50) 가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 두 정수 a와 b(0 < a, b ≤ 1,000,000)의 값이 주어진다. a는 26과 서로소이다.
각 테스트케이스의 두 번째 줄에는 평문 s가 주어진다. 평문의 길이 |s|는 0보다 크고 1,000,000보다 작다.
[출력]
각 테스트 케이스마다 한 줄에 한 개씩 평문 s를 암호문으로 치환한 결과를 출력한다.
[Source Code]
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int main() {
int num;
cin >> num;
for(int i = 0; i < num; i++){
int a, b;
string input;
cin >> a >> b >> input;
for(int j = 0; j < input.length(); j++){
int temp = (int)input[j] - 65;
temp = (a * temp + b) % 26;
cout << char(temp+65);
}
cout << "\n";
}
}
[결과 화면]
'YJ > C++' 카테고리의 다른 글
[백준/BOJ/C++] 10984번 내 학점을 구해줘 (0) | 2021.12.22 |
---|---|
[백준/BOJ/C++] 11945번 뜨거운 붕어빵 (0) | 2021.12.22 |
백준/BOJ/C++] 10820번 문자열 분석 (0) | 2021.12.22 |
[백준/BOJ/C++] 11655번 ROT13 (0) | 2021.12.22 |
[백준/BOJ/C++] 7595번 Triangles (0) | 2021.12.22 |