프로그래밍 숙련도에 따라 풀이 속도에 차이가 많이 나는 문제다. 그리고 웹에 대한 기초 지식도 필요하다. 풀이에 확신이 없다면 정확한 풀이를 감각적으로 떠올렸더라도 '에이 설마...' 라고 생각하면서 그냥 넘어가게 된다. 미궁 문제들의 고전적인 방법으로 정답을 숨기진 않은 것 같다만, 뭐 그렇다고 해서 막상 풀이를 보고 엄청 어렵게 느껴지진 않는다. 다음 문제 중에 경악할게 아직 남아있으니까 벌써부터 힘들면 안된다 ㅎㅎ
영문을 번역하면서 딱 감이 오는 사람은 이미 웹에 익숙한 사람이다. 그게 아니라면 모니터에 얼굴을 쳐박고 있어야될지 모른다. 거북목을 방지하려면 얼른 모니터에서 눈을 멀리 떼길 바란다.
전산 전공자의 입장에선 꽤나 직관적인 단서가 주어져있으므로 그대로 따라가보길 권한다.
0단계. 문제 해독
단서에서 MAYBE로 강조해놨듯이 page source로 가면 된다. 대부분의 웹브라우저는 화면을 우클릭하면 [페이지 소스 보기] 와 같은 메뉴를 제공한다. 따라가보면 다음과 같은 html 소스가 나온다.
모니터 길이랑 해상도에 따라 차이가 나겠지만 페이지 소스와 상관없는 주석을 쉽게 발견할 수 있다. 심지어 어떻게 정답을 찾을지도 이미 적어두었다.
1단계. 실마리 찾기
find rare characters in the mess below
시키는대로 하...려고보니 진짜 길다. 그리고 대부분의 글자는 매우 많이 중복되어 있다. 스크롤을 내리면서 주석을 감상하면 이미 늦다. '적은 빈도로 발견되는 글자를 어떻게 찾지?' 라고 생각이 들면 파이썬에 안 익숙한 걸지도 모른다. 그냥 대뜸 모두 복사해서 텍스트 파일로 만들자. 나는 주석을 복사에서 2text.txt로 저장했다.
찾고자 하는 것은 적은 빈도로 등장하는 문자다. temp_list에는 등장한 순서와 등장 횟수를 맞춰서 계속 업데이트시킬 것이다. O(n^2) 알고리즘이긴 한데, 순서를 지키면서 저장시키려니까 dictionary도 안되고 set도 안돼서 일단 그냥 저렇게 해버렸다. 등장 빈도가 100번 아래로 떨어지는 모든 문자를 순서대로 출력하도록 설정해보니까 답이 나왔다.
물론 text파일을 만드는 것이 귀찮으면 url 그대로 복사해서 소스를 한 번 읽는 방식으로 진행해도 상관없다.
3단계. 문제 해결
break 색깔을 바꿔주지 않는게 이상하긴 하지만 뭐 일단 위같은 코드를 짜서 돌리면 결과를 알려준다. 정확하게 equality라는 글자가 출력된다. ocr.html을 대신해서 equality.html로 바꾸면 다음 레벨로 넘어갈 수 있다.