문제
제곱암호는 다음과 같은 특징을 가진다.
- 암호문의 길이가 N이라면, N/2개의 숫자와 N/2개의 알파벳 소문자로 이루어져 있다. 암호문의 길이는 항상 짝수이다.
- 암호문의 첫 글자는 항상 알파벳 소문자이며, 이후에는 항상 숫자와 알파벳 소문자가 번갈아 가며 등장한다.
제곱암호로 암호화된 문장은 아래 방식을 통해 복호화할 수 있다.
- 원문은 처음에 비어있는 상태이다.
- 암호문의 첫 번째 문자부터 순서대로 아래의 복호화 과정을 거친다. 첫 번째 문자는 문장의 가장 왼쪽 문자를 의미한다.
- i가 홀수일 때, 암호문의 i번째 문자를 알파벳의 사전 기준 다음 문자로 바꾸는 작업을 암호의 i번째 숫자의 제곱번 시행한다. 작업이 끝난 뒤 변환된 알파벳을 원문의 맨 오른쪽에 추가한다. (i번째 숫자는 암호문의 i+1번째 문자에 해당한다.)
- z에서 사전 기준 다음 문자로 바꿔야 하는 경우에는 a로 바뀌게 된다.
- 복호화가 끝난 뒤의 원문은 N/2의 길이의 알파벳 소문자로만 이루어진 문자열이다.
제곱암호를 원문으로 복호화 하는 프로그램을 작성하시오.
입력
첫째 줄에는 암호문의 길이를 의미하는 정수 N이 주어진다.
둘째 줄에는 암호문 S가 주어진다.
- 4 ≤ N ≤ 200,000 : N은 짝수이다.
- S는 알파벳 소문자와 1부터 9사이의 숫자로만 이루어져 있다.
import sys
input = sys.stdin.readline
passLen = int(input())
passStr = input()
result = ""
for i in range(0, passLen, 2):
s = passStr[i]
n = int(passStr[i+1])
result += chr((ord(s) - ord('a') + (n*n)) % 26 + ord('a'))
print(result)
아스키코드로 해결할 때 'a'는 97임을 잊지말자.
※출처
https://multicampus-kdt.goorm.io/lecture/38996/멀티잇-코딩테스트-러닝클래스-python-6월반