본문 바로가기

WarGame/PythonChallenge

Python Challenge 01 :: maketrans


블로그에 글 올릴 마땅한 소재가 없었는데 얼마전 재미있는 python challenge 사이트를 알게되어 블로그에 정리해 봅니다. 언제나 그렇 듯 Challenge 0은 가볍게 뛰어 넘고 시작합니다.


아래와 같은 문제가 나옵니다. 오랜만에 암호학이 떠 오릅니다.


 

암호학을 공부해 보셨다면 쉽게 접근이 가능한 문제인 것 같습니다.

아마 저를 비롯한 대부분의 사람들이 아래와 같은 코드로 접근할 것 같습니다.

기본적인 코드에 대해서는 별도로 설명하지 않겠습니다.



손으로 하나하나 푸신 분들은 아마 뜨끔하실 만한 문장이 나오네요 :)

그런데 maketrans() 함수를 추천한다고 합니다. 역시 파이썬의 장점이라고 할 수 있는 다양한 레퍼런스를 이용해 풀수 있는 방법이 있었다는 것을 짐작할 수 있습니다.

maketrans() 함수에 대해 조사하여 아래와 같은 코드를 만들 수 있었습니다.


maketrans() 함수를 쓰기 위해서는 import string을 선언해 주어야 합니다. 먼저 text 변수에 원본 문자열을 넣고, table 변수에 maketrans(문자, 매핑 문자) 를 이용하여 매핑 테이블을 넣어줍니다.

(※ 2.x 버전에서는 string.maketrans() 이지만 3.x 버전에서는 str.maketrans() 입니다.)

실제 해독할 때는 translate(매핑 테이블) 를 이용하면 됩니다. 굉장히 간편한 코드가 생성되었습니다 :)


좀 더 알아보니 string.ascii_lowercase 라는 것도 있습니다.



table = str.maketrans(string.ascii_lowercase, 

   string.ascii_lowercase[2:] + string.ascii_lowercase[:2])


이런식으로 적용하면 알파벳을 일일이 적어줄 필요가 없다.


파이썬을 공부하는 것이 목적이므로 문제의 Key에 대해서는 따로 언급하지 않겠습니다.


'WarGame > PythonChallenge' 카테고리의 다른 글

Python Challenge 06 :: zipfile  (0) 2015.10.26
Python Challenge 05 :: pickle  (0) 2015.10.23
Python Challenge 04 :: urlparse  (0) 2015.10.22
Python Challenge 03 :: urlopen, re.findall  (0) 2015.10.22
Python Challenge 02 :: count  (0) 2015.10.22