문제
문제
서쪽나라에서 특수훈련을 받은 정은이는 동쪽나라로 침투를 하게 되었다. 뛰어난 스파이였던 정은이는 동쪽나라의 정보를 입수하게 되었고 정보를 안전하게 서쪽나라로 전달하기 위해 아핀 암호(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를 암호문으로 치환한 결과를 출력한다.
예제 입력 1 복사
2
3 1
IAMSPY
5 3
ABCDEFGHIJKLMNOPQRSTUVWXYZ
예제 출력 1 복사
ZBLDUV
DINSXCHMRWBGLQVAFKPUZEJOTY
https://www.acmicpc.net/problem/11575
Algorithm
1.첫줄에 테이트 케이스를 입력받는다.
2.테스트 케이스만큼 반복하는 반복문을 작성한다.
3.각 테스트 케이스마다 a와b를 map을 이용하여 같은줄에서 입력받고 다음줄에 평문을 입력받는다.
4.평문의 각각 알파벳마다 암호작업을 한 후 change변수에 이어붙일 것이므로 반복문을 이용한다.
5.문제에서 a,b,c,d,e...이 0,1,2,3,4..라고 한다고 가정하고 있으므로 상황에 따라 65를 더하거나 빼서 이를 맞춰주는 작업을 한다.
6.change변수에 이어붙인 암호문을 출력한다.
Code
case=int(input())
for i in range(case):
a,b=map(int, input().split())
s=input()
change=""
for j in range(len(s)):
change+=chr((a*ord(s[j])-65+b)%26+65)
print(change)
'Koala - 18기 > 코딩테스트 기초 스터디' 카테고리의 다른 글
[백준/python] 12840 : 창용이의 시계 (0) | 2025.05.17 |
---|---|
[백준 / Python] 2566 : 최댓값 (0) | 2025.05.04 |
[백준/Python] 1316 : 그룹 단어 체커 (0) | 2025.04.13 |
[백준/Python] 3059 : 등장하지 않는 문자의 합 (0) | 2025.04.06 |
[백준/Python] 5218 : 알파벳 거리 (0) | 2025.04.05 |