[코딩테스트] 시저 암호

김희정·2024년 3월 21일
0

Coding Test

목록 보기
5/7
post-custom-banner

💎 들어가며

이번 포스팅에서는 시저 암호에 대해 다뤄보고자 합니다.


시저 암호

시저 암호(Caesar cipher)

시저 암호(Caesar cipher) 또는 카이사르 암호는 암호학에서 다루는 간단한 치환암호의 일종이다.

실제로 로마의 황제 카이사르는 이 카이사르 암호를 사용하기도 했다. 카이사르 암호는 암호화하고자 하는 내용을 알파벳별로 일정한 거리만큼 밀어서 다른 알파벳으로 치환하는 방식이다. 예를 들어 3글자씩 밀어내는 카이사르 암호로 'COME TO ROME'을 암호화하면 'FRPH WR URPH'가 된다.

카이사르 암호는 약 기원전 100년경에 만들어져 로마의 장군인 카이사르가 동맹군들과 소통하기 위해 만든 암호이다.

시저 암호는 암호학에서 다루는 간단한 치환암호입니다. 암호화하고자 하는 내용을 알파벳별로 일정한 거리만큼 밀어서 다른 알파벳으로 치환하는 방식입니다.


💡 문제

1. 시저암호

시저암호

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12926

2. 둘만의 암호

시저암호

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/155652


🔍 해결법

  • 암호 리스트를 정의합니다.
  • 밀려나는 숫자 만큼 더해줍니다.
  • 모듈러 함수(%)를 통해 순환되도록 합니다.
def decode(str_list, e, n):
    idx = (str_list.index(e)+n) % len(str_list)
    return str_list[idx]
import string
def solution(s, n):
	return ''.join(list(map(lambda x: decode(string.ascii_lowercase. x, 5), s)))

알파벳을 5만큼 민 경우

abcdefghijklmnopqrstuvwxyz
fghijklmnopqrstuvwxyzabcde
solution("cvkkt", 5) # 결과: "happy"

알파벳 사용시에는 아래와 같이 암호 리스트를 정의하면 됩니다.

# string 모듈 사용시
import string
string.ascii_letters	# 결과: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
string.ascii_lowercase	# 결과: abcdefghijklmnopqrstuvwxyz
string.ascii_uppercase	# 결과: ABCDEFGHIJKLMNOPQRSTUVWXYZ

# string 모듈 미사용시
lower = 'abcdefghijklmnopqrstuvwxyz'
upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
profile
Java, Spring 기반 풀스택 개발자의 개발 블로그입니다.
post-custom-banner

0개의 댓글