본문 바로가기

Dev. Etc/Algorithm

[알고리즘] 암호를 해독해라 - python

 

 

 

 

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

섬으로 향하라!

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

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

 

 


 

A.

array = ['   + -- + - + -   ',
        '   + --- + - +   ',
        '   + -- + - + -   ',
        '   + - + - + - +   '
];

s = [i.strip().replace(' ','').replace('+','1').replace('-','0') for i in array ]
list = list(map(lambda x: chr(int(x,2)), s))
result = ''.join(list);
print(result);

 

풀이 : +는 1 / -는 0으로 생각하고 문제를 접근한다.

array 변수에 암호를 해독할 값을 넣어주고 배열에 각 인자를 i라고 지정하고 strip을 통해 앞뒤 공백을 모두 제거해준다.

제거된 공백의 값을 replace를 통해 그안에 띄워쓰기 공백을 제거해주고, +는 1로 -는 0으로 변경해준다.

"1001010"이라는 값으로 모두 치환되어 나온 변수가 s이다.

s변수를 map함수의 첫번째 인자에 함수를 넣어주고, 두번째 인자에 배열을 넣어준다.

첫번쨰 인자 함수에는 람다를 사용해서 s 배열의 인덱스 0부터 끝까지 하나씩 대입해 2진법으로 변경해준다음 문자열로 변경해준다. 변경된 값을 모두 list에 담아준다.

join을 통해 문자열을 하나로 합친다.

 

 


출처 : 눈떠보니 코딩테스트 전날 (인프런)