오도원입니다.

건강과 행복을 위하여

프로젝트/비버챌린지

03. 점심 뭐 먹을까?

오도원공육사 2020. 5. 16. 03:17
반응형

앨런 튜링에 대한 영화 '이미테이션 게임'에서는 암호에 대해서 나온다. 어린 시절 튜링과 친구가 사용했던 암호는 알파벳 글자의 위치를 네 글자씩 옮겨 쓰는 방식이었다. 이 규칙을 적용하여 암호를 해석해보자.

 

여기서는 정보의 표현 방법을 찾고, 표현된 정보를 바탕으로 알고리즘을 설계하여 프로그래밍하는 과정을 학습해보겠다.

 

1. 정보 구조화

정보를 목적에 따라 체계적으로 정리하여 표현하는 것을 정보 구조화라고 한다. 정보 구조화의 형태로는 목록, 표, 계층형, 그래프, 마인드맵, 벤다이어그램 등이 있다.

 

시간표를 글로 받을 때와 표로 받을 경우 차이점은 무엇일까.

  • 메시지 : 내용을 하나하나 확인해야한다.
  • 표 : 세로줄(요일)과 가로줄(교시)만 확인하면 된다.

이와 같이 정보를 문제 해결의 필요에 맞게 구조화하여 표현하는 것은 문제 해결의 효율성을 높인다.

 

2. 문제 분석하기

  • 현재 상태 : 암호화된 글자가 나열된 상태, 내용을 알 수 없다.
  • 목표 상태 : 네 글자 이전의 알파벳 위치를 찾아 암호를 해석하는 것

3. 해결방법 탐색하기

  • 문제 해결을 위해 구조화 작업이 필요하다
    • => 알파벳을 순서대로 나열한다.

4. 정보 구조화

알파벳을 순서대로 나열하여 표현한다.

5. 문제 해결방법 적용하기

구조환된 정보를 활용하여 문제해결 방법을 단계별로 적용한다.

 

6. 발전시킨 방법으로 문제 해결

 

7. 도전! 비버챌린지

원문 메시지 P I Z Z A
왼쪽으로 회전 3 1 4 3 1
암호 메시지 S J D C B

 

8. 핵심요소 추출

  • 주어진 문제는 회전한 칸 수가 계속 바뀐다.

9. 문제 해결하기

1. 문제에 주어진 암호문의 글자 순서구하기

암호메시지 O F T H R I
암호문의
글자순서
15 6 20 8 9 18 9

 

2. 암호 문자 별 회전 수 구하기

암호문의
글자순서
15 6 20 8 9 18 9
왼쪽으로
회전
3 5 1 7 2 4 8

 

3. 원문 글자 순서 구하기 => 각 암호문 글자 순서 - 왼쪽으로 회전한 수

암호문의
글자순서
15 6 20 8 9 18 9
왼쪽으로
회전
3 5 1 7 2 4 8
원문 글자
순서
12 1 19 1 7 14 1

 

4. 원문 글자 순서를 통해 원문 메시지 확인

원문 글자
순서
12 1 19 1 7 14 1
원문 메시지 L A S A G N A

 

10. 문제 해결 결과

  • 정답은 D) LASAGNA이다.
  • 문제 해결을 위해 적절한 구조화를 하면 효율적이다.

11. 파이썬으로 풀어보기

alphabet = {}
for i in range(1, 27):
    alphabet[chr(i+64)] = i
left = [3, 5, 1, 7, 2, 4, 8]
code = 'OFTHIRI'

>소스코드

더보기
def decode(code, left):
    global alphabet
    msg = []
    for i in range(len(code)):
        msg.append(list(alphabet.keys())[list(alphabet.values()).index(alphabet[code[i]] - left[i])])
    return ''.join(map(str, msg))

print(decode(code, left))

 

반응형

'프로젝트 > 비버챌린지' 카테고리의 다른 글

02. 다이어그램  (0) 2020.05.16
01. 비브라그램  (1) 2020.05.16