일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 간단한 날씨 웹 만들기
- [AI 5기] 연습 문제집
- 엘리스
- 개발공부
- 리트코드
- 개발일기
- 날씨 웹 만들기
- HTML
- [파이썬 실습] 중급 문제
- JavaScript
- 자바스크립트
- 코딩부트캠프
- 자바스크립트 날씨
- 프론트개발공부
- 부트캠프
- 코드스테이츠
- leetcode
- reactnativecli
- 자바스크립트 split()
- 엘리스 ai 트랙
- 프론트개발
- 프로그래머스
- [파이썬 실습] 기초 문제
- 삼항연산자
- 자바스크립트 reduce()
- 자바스크립트 날씨 웹 만들기
- 자바스크립트 sort()
- [파이썬 실습] 심화 문제
- RN 프로젝트
- 엘리스 AI 트랙 5기
- Today
- Total
개발조각
[파이썬 실습] 심화 문제_암호문 해석하기 본문
암호문 해석하기
에니그마(Enigma, 수수께끼)는 독일군이 전장에서 사용했던 암호 생성 장치입니다.
독일어 알파벳 각각에 대하여 다른 알파벳에 임의로 대응시킨 다음, 이렇게 대응된 알파벳으로 전신 부호를 발송했습니다.
예를 들어 a는 p, b는 q, c는 r에 대응시켜 암호화한 전신을 보낼 때 ‘abc’는 ‘pqr’로 전달됩니다. 해독 코드가 담긴 문서는 사람을 써서 반대편에 미리 전달해두고, 이것을 참고해서 전신을 해독했습니다.
에니그마는 각 알파벳이 대응하는 다른 알파벳의 세트에 따라 같은 단어도 다른 코드로 변환합니다.
지시사항에 따라 두 개의 암호 대응표를 이용하여 암호 코드를 해독하는 파이썬 프로그램을 완성하세요.
지시사항
암호의 알파벳을 키로, 대응하는 알파벳을 값으로 저장한 두 개의 딕셔너리 signal1 과 signal2가 있습니다.
암호문의 형태는 다음과 같습니다.
01011 eowxvqp
우선 01011은 5개의 0과 1로 구성되어 있으므로 암호문이 5개의 알파벳으로 구성된 암호문이라는 것을 알 수 있습니다.
따라서 이 암호문은 5번째 알파벳인 v까지만 해석하며, 6번째 알파벳인 q부터는 해석하지 않고 버립니다.
앞에 0과 1은 같은 자리의 알파벳을 각각 signal1을 이용하여 해석할지, signal2를 이용하여 해석할지를 의미합니다.
위 예시에서 0에 대응하는 e, w는 signal1을 이용하여 해석하고 1에 대응하는 o, x, v는 signal2를 이용하여 해석합니다.
signal1에서 e와 w는 각각 e와 i에 대응하며, signal2에서 o, x, v는 각각 l,c,e에 대응합니다.
따라서 예시의 암호문을 해석하면 elice가 되며 이를 출력하시면 정답입니다.
이처럼 암호문을 문자열로 입력받으면 이를 원문으로 해석한 문자열을 출력하는 프로그램을 완성하세요
예시1
암호문(입력)
01011 eowxvqp
원문(출력)
elice
예시2
암호문(입력)
111 zmgaaw
원문(출력)
ant
주의사항
signal1과 signal2는 암호를 원문으로 해석할 때에 사용하는 대응표입니다.
예를 들어 signal1을 이용하여 abc라는 암호문을 해석하면 ‘nda’가 됩니다.
평가방식
총 10개의 암호문을 해독하는 방식으로 채점되며, 각 암호문의 글자수는 다를 수 있습니다.
# 암호의 알파벳을 키로, 대응하는 원문의 알파벳을 값으로 저장한 딕셔너리입니다.
signal1 = {'a': 'n', 'b': 'd', 'c': 'a', 'd': 'b', 'e': 'e', 'f': 'l', 'g': 'j', 'h': 'o', 'i': 'z', 'j': 'u', 'k': 'y', 'l': 'v', 'm': 'w', 'n': 'q', 'o': 'x', 'p': 'r', 'q': 'p', 'r': 'f', 's': 'g', 't': 't', 'u': 'm', 'v': 'h', 'w': 'i', 'x': 'c', 'y': 'k', 'z': 's'}
signal2 = {'a': 'z', 'b': 'y', 'c': 'x', 'd': 'w', 'e': 'v', 'f': 'u', 'g': 't', 'h': 's', 'i': 'r', 'j': 'q', 'k': 'p', 'l': 'o', 'm': 'n', 'n': 'm', 'o': 'l', 'p': 'k', 'q': 'j', 'r': 'i', 's': 'h', 't': 'g', 'u': 'f', 'v': 'e', 'w': 'd', 'x': 'c', 'y': 'b', 'z': 'a'}
# 지시사항을 참고하여 코드를 작성하세요.
def decode(code):
text = ''
i=0
while i<len(code.split()[0]):
if code.split()[0][i] == '0': text += signal1[code.split()[1][i]]
else : text += signal2[code.split()[1][i]]
i+=1
return text
code=input() # 암호문을 문자열의 형태로 입력받습니다.
text = decode(code)
print(text) # 해독된 문자열을 출력합니다.
'엘리스 AI 트랙🐇 > [AI 5기] 연습 문제집_파이썬 실습' 카테고리의 다른 글
[파이썬 실습] 심화 문제_문자의 빈도 조사하기 (0) | 2022.06.05 |
---|---|
[파이썬 실습] 심화 문제_겹치는 구간의 길이 (0) | 2022.06.05 |
[파이썬 실습] 심화 문제_렌터카 (0) | 2022.06.05 |
[파이썬 실습] 심화 문제_끼리끼리 (0) | 2022.06.05 |
[파이썬 실습] 심화 문제_8은 특별해! (0) | 2022.06.05 |