암호 해독

박지예·2021년 9월 14일
0

공부

목록 보기
9/42

뭔가 코딩테스트 같은 문제를 풀어보았다

모든 알고리즘을 해독할 수 있는 알고리즘 7 원석를 보유한 알고리즘 제왕 파이은 죽기 전, 이 보물에 '암호'를 걸어 세계 어딘가에 묻어놨다고 공표하였다. 그가 남긴 문자는 아래와 같다.

# 섬으로 향하라!

'   + -- + - + -   '
'   + --- + - +   '
'   + -- + - + -   '
'   + - + - + - +   '

# 해(**1**)와 달(**0**),
# Code의 세상 안으로!(**En-Coding**)

이건 뭔 초등학교 때 푼 창의력 해법수학과 닮아 있다...

차분하게 생각해보면...
1. 옆으로 봐도 앞으로 봐도 이진수를 말하는 것 같다
2. 이런 이진수를 마지막에 문자열로 바꾸게 될것 이다.
3. 숫자를 문자로 바꾼다?? -> 아스키코드!!

라는 결론에 도달하게 된다.

# 리스트에 저장
arr = ['   + -- + - + -   ',
'   + --- + - +   ',
'   + -- + - + -   ',
'   + - + - + - +   ']

l = [] # 새 리스트 생성
다음에 저장된 문자열을 숫자로 바꿔주자
i.strip().replace(' ','').replace('-','0').replace('+','1')
  • strip함수: 공백 제거함수
  • replace 함수: 앞에 나온 문자를 뒤에 문자로 바꿔준다.
다음엔 이렇게 만들어진 0과1의 숫자들을 10진수로 바꿔주자
int(i.strip().replace(' ','').replace('-','0').replace('+','1'),2)
이렇게 만든 10진수를 다시 아스키코드를 이용하여 문자열로!
chr(int(i.strip().replace(' ','').replace('-','0').replace('+','1'),2))

이렇게 엄청 기이잉일어진 코드를 l 리스트에다 삽입해주자

    l.append(chr(int(i.strip().replace(' ','').replace('-','0').replace('+','1'),2)))

총코드

# 리스트에 저장
arr = ['   + -- + - + -   ',
'   + --- + - +   ',
'   + -- + - + -   ',
'   + - + - + - +   ']

l = [] # 새 리스트 생성

for i in arr: #리스트의 길이 만큼 돌기(4번)
    #strip(): 공백 제거 함수
    l.append(chr(int(i.strip().replace(' ','').replace('-','0').replace('+','1'),2)))


print(''.join(l))

결과

profile
언젠간 바다로 갈거야!🐋

0개의 댓글