😴

2. 알고리즘 7원석을 찾아서

 

암호해독!

 
세상의 모든 원리, 세상의 모든 난제 알고리즘을 해독할 수 있는 알고리즘 7 원석, 비상한 지혜와 신비한 힘을 주는 이 7원석은 오랫동안 파이와 썬이 관리를 해왔습니다. 파이와 썬이 어떻게 그 7원석을 얻을 수 있는지는 전해진 얘기가 없었어요.
단지 그 힘이 워낙 강력하여 위니브 월드에 라이언도 넘보지 못할 정도였다는 것만 전해져 왔습니다. 하지만 파이와 썬은 세상의 규칙을 힘으로 깨는 것을 극도로 견재했어요. 그래서 세상에 그 모습을 나타내지 않았습니다. 간혹 그가 모습을 드러낼 때에는 천지가 진동할 힘을 동반했고, 그 모습은 구전으로 세상에 전해졌습니다.
하지만 모든 동물의 수명이 영원할 수는 없는 법. 알고리즘 제왕 파이은 죽기 전, 이 보물에 '암호'를 걸어 세계 어딘가에 묻어놨다고 공표하였습니다. 그가 남긴 문자는 아래와 같습니다.
 
notion imagenotion image
물론, 캣은 이 문제를 푸는 것이 어렵지 않았습니다. 그는 이미 위니브 월드에서도 손꼽히는 기술자였으니까요.
 

 

JAVA독과 함께!

 
라이켓은 모험을 함께할 동료를 얻기로 합니다. 험난한 모험에는 그에 걸맞는 동료가 있어야 한다는 사실을 이미 사업을 통해 깨달았기 때문이에요.
notion imagenotion image
 
하지만 선뜻 멀고 험한길을 라이캣과 함께 해줄 친구들은 없었답니다.
라이캣은 동료가 되어줄만한 각 부족의 영웅들을 찾아갔습니다. 그리고 그들에게 동료가 될 것을 권했습니다.
"동료가 되어라냥!"
뭐지? 명령문인가?
'냥'이라니, 자연어처리가 힘들겠는걸?
동료는 sum인가, concat인가? axis 0인가, 1인가?
그를 처음보는 동물 친구들은 수근거렸습니다. 혼자 코딩하기 좋아하는 동물 친구들은 동료라는 말도 이해하지 못했어요.
초원이 멋진 어느 마을에 도착했을 때, 그 마을에서 가장 재빠르고, 영리한 JAVA독이 말했습니다.
"Python, 궁금!? 그러나 너의 실력 검증!?"
자바독은 안그래도 여행을 떠날 참이었습니다. 그렇지만 한번도 보지 못한 낮선이를 함부로 따라갈 수는 없었어요. 실력은 거짓말을 하지 않는다 생각했습니다. 그래서 그에게 시험을 하기로 합니다.
"내가 동료되길 원해? 그렇다면 검증필!?"
라이캣은 거절할 이유가 없었죠.
"좋아냥!"
 
notion imagenotion image
notion imagenotion image
 
"저기 징검다리 보임!? 내 친구들, 징검다리 건너길 원함!? 하지만 징검다리 내구도 한계 있지! 내 친구 몸무게, 돌의 내구도, 친구들의 점프력을 고려해야해! 자, 루비독, 피치피독, 씨-독, 코볼독. 내 모든 친구가 다리를 건널 수 있는지 알아 보는 것이 문제야! 친구들은 더 추가 될 수도, 덜 건널 수도 있어!"
라이캣에게 문제를 맞출 기회는 3번이 주어졌습니다. 라이캣은 돌에 내구도를 계산하여 친구들이 돌을 실수 없이 건널 수 있도록 문제를 풀었습니다. 물론 개들은 수영을 매우 잘한다는 것을 라이캣은 잘 알고 있었지만, 동료가 될 친구들을 물에 빠트리면서까지 코딩을 하고 싶지 않았어요.
자바독은 옆에서 그 모습을 보고, 매우 흡족해했습니다.
"자, 다 풀었다냥! 이제 이 코드대로 다리를 건너라냥!"
그러나 친구들은 다리를 건너지 않았어요. 자바독은 고개를 끄덕였습니다.
 

 

섬으로 건너가라!

 
라이캣은 동료가 된 자바독과 함께 섬으로 향했습니다. 2021년 1월 1일, 항구에서 배를 기다리는데 방송이 흘러 나왔습니다.
 
승객 여러분께 알려드립니다. 🔊 이 방송은 주기적으로 나오는 안내 방송입니다. 귀기울여 들어주세요. 배는 매일 9시부터 21시 전까지 10분 단위로 들어옵니다. 정시에 들어오는 배는 25명, 10분마다 들어오는 배는 15명씩 탈 수 있으며 현재 전체 대기 인원은 14,000,605명입니다. 배는 휴일도 동일하게 운항되며 마법으로 날아다니기 때문에 천재지변에 영향을 받지 않습니다.
 
notion imagenotion image
 
라이캣은 기다리는 시간동안 배를 만들수도 있겠다는 생각을 했습니다. 그가 가진 재력과 기술력이라면 충분히 가능하다고 생각했어요.
라이캣은 배를 리버싱 했습니다. 리펙토링 하기 위해서였어요. 옆에서 자바도 함께 했습니다. 시간이 많이 지났고, 라이캣과 자바독은 10대의 배를 더 만들 수 있었습니다.
사람들은 웅성되기 시작했어요. 그것은, 정해진 길이 아니었기 때문이었습니다. 하지만 낮선 감정은 곧 가라앉고 군중은 환호했습니다.
이는 라이캣과 자바독이 이름을 알린 대 사건 중 하나였죠.
 

 

자리를 양보해가며!

 
라이캣과 자바독이 배에 타고보니, 배를 만들 때 의자가 모자랐는지 좌석이 3개밖에 없었습니다.
 
notion imagenotion image
 
가장 먼저 탄 사람이 당연히 앉아야지!
아니, 가장 키가 큰 사람이 앉아야지!
아니, 가장 덩치가 큰 사람이 앉아야지!
 
사람들이 수근 거릴 때, 개리가 말했습니다.
notion imagenotion image
 
모두 알고리즘 보물을 찾으러 가는 것이 아닌가!? 개굴! 그러니 모두 알고리즘 문제로 승부를 봅시다. 개굴!
그때 라이캣이 손을 들었습니다.
주목해주냥! 내게 좋은 아이디어가 있다냥!
 
notion imagenotion image
캣이 말한 아이디어는 LRU(Least Resently Used) 알고리즘을 사용하여 약자를 배려하자는 아이디어였습니다. 그러나 개리는 동의할 수 없었어요. 그보다 더 효율적인 아이디어 들이 있었거든요.
개리가 따지듯이 말했습니다.
"효율을 무시한 배려라니, 그런 알고리즘은 용납될 수 없다 개굴!"
라이캣이 말했습니다.
"배려를 무시한 효율이라니, 그렇다면 나와 자바독이 왜 이 배를 만들었을까냥? 만약 그러한 논리라면, 우리는 우리가 탈 배만 제작해서 떠났을 것이다냥."
notion imagenotion image
개리는 진심으로 그에게 반했습니다. 맞아요. 그들은 이미 떠났어도 한참 전에 떠날 수 있던 친구들이었습니다.
 

 

단서를 찾아서!

 
라이캣에 감동받은 개리는 라이캣에게 함께하고 싶다고 말하였고 라이캣은 흔쾌히 수락하였습니다. 그리하여 라이캣, 자바독, 개리는 동료가 되었고, 제주에 도착하여 단서를 찾기 시작했습니다. 하지만 단서를 찾는 것은 막막하기만 했어요. 제주 끝에서 끝까지는 말을 타고 하루를 달려야 할 만큼 먼 거리였거든요.
"파이와 썬이 이곳에 와서 무슨 생각을 했을까냥?"
"어떤 단서를, 어디다 두어야 할지 고민했겠지. 개굴!"
"만약 내가 파이와 썬이라면, 누구나 '어쩌다' 찾을 수 있는 곳에는 단서를 놓지 않았을 것 같다냥."
자바독이 생각에 잠겨있다가 혼잣말 하듯이 말했습니다.
"우리가 가진 단서있독! 알고리즘, 보물, 파이, 썬 그리고 제주가 있독!"
라이캣과 자바독과 개리는 가지고 있는 단서를 가지고 제주와 연관시킬 수 있는 곳이 어디있는지 고민해보았습니다.
"제주가 가진 보물은 무엇이 있을까냥? 제주와 보물, 제주와 파이, 제주와 썬."
라이캣은 무언가 생각났는지 지나가던 행인을 붙잡고 물었어요.
"제주는 화산섬이라 들었는데, 그와 연관된 300개 정도 있는 것, 제주에 보물이라 할만한 것은 무엇이 있을까냥?"
행인이 대답해주었어요.
"뜬금? 오름이 있수다. 산과 비슷하지만 몇 걸음만 올라가면 되는 동산이지예. "
"거기서 1000걸음 정도에 올라갈 수 있는 오름은 어디가 있냥?"
"뜬금? 용눈이오름이나, 다랑쉬오름이나, 따라비오름이나 아부오름이 1000걸음이면 올라갈 수 있수다."
라이캣은 오름으로 가자고 했어요. 파이는 수학으로 3.14(π). 제주가 가지고 있는 314개의 보물, 그 중에서도 314m의 고도를 가지고 있는 곳, 그곳에 단서가 있을 것이라 생각하기 때문이에요. 아마도 그런 이유에서 제주를 택하지 않았을까 생각했습니다. 용눈이오름, 다랑쉬오름, 따라비오름을 모두 아침부터 저녁까지 수색하였고, 이제 언급된 오름 중 마지막 오름인 아부오름으로 향했습니다.
아부 오름은 중간이 움푹 파여있는 원형 형태였고, 파여 있는 넓직한 공간에는 나무가 바위들을 호위하듯이 원을 그리며 자라나 있었습니다. 단서는 어디에도 보이지 않았어요.
 
notion imagenotion image
 
"라이캣, 처음부터 다시하는 어떤독?"
"아마도 네가 틀린 것 같다 개굴."
동료들은 지쳤고, 라이캣은 실망했습니다. 하지만 라이캣은 여기가 확실하다는 강한 직감에 사로잡혔어요.
"아니다냥. 여기서 좀 더 찾아보자냥. 하루만, 하루만 더 찾아보자냥."
밤새 동료들은 단서를 찾아보았지만, 단서는 발견되지 않았어요. 라이캣은 뜨는 해를 바라보며, 되뇌여 보았습니다.
"내가, 파이와 썬이었다면냥."
라이캣이 상념에 사로잡혀 있을 때! 떠오르는 태양이 산 중간에 있는 바위에 그림자를 만들어 냈고, 그 그림자를 멍하니 바라보던 라이캣은 갑자기 일어섰습니다.
"모두 이리로 냥! 단서를 찾았다냥!"
 

 

그림자 연결!

 
notion imagenotion image
 
단서를 찾았다는 라이캣의 말에 모두가 모여들었습니다.
"그래서 그 단서가 무엇이지? 개굴!"
"이 돌들의 그림자를 자세히 보라냥!"
라이캣의 말대로 그림자를 자세히 보니 바위 틈 사이로 빛이 통과한 곳에 작은 원들이 그려진 것을 볼 수 있었습니다.
"하지만 저 모양으로는 아무 단서도 발견할 수 없다독. 활용할 수 있는 데이터가 너무 적다독."
"저 모양을 보고 떠오르는 것이 없냥?"
"트리!!"
자바독과 개리가 동시에 외쳤어요. 그렇지만 자바독이 말한 것처럼 활용할 수 있는데이터가 너무 적었습니다. 모두가 라이캣이 더 설명해주길 기다렸어요.
"우리가 활용할 수 있는 것은 그림자, 빛, 빛 간의 거리, 그리고 알고리즘이다냥. 트리의 알고리즘이 많지 않으니, 모두 시도해보고 유의미한 데이터가 뽑히는 알고리즘을 사용해보면 된다냥!"
라이켓은 각 간선간의 길이 비율이 오후까지 변하지 않는다는 사실을 알아냈습니다. 처음 선의 비율이 1이라고 했을 때, 모든 선의 비율은 아래와 같습니다.
 
notion imagenotion image
notion imagenotion image
 
그리고 라이켓은 그 선의 비율에 100을 곱하여 노드를 완성하였어요. 그리고 마찬가지로 이 숫자들의 조합으로 최종 목적지를 알게 됩니다.
 

 

밭의 비밀

 
성산일출봉, 99개의 봉우리가 왕관(Crown)처럼 둘러싸고 있는 곳!
일행은 그곳에서 수상한 북극곰을 발견했습니다.
안녕 하우꽈? 나는 Drop the Beat에서 커피 내리는 소울곰마심. 커피 마시러 와수과?
notion imagenotion image
 
notion imagenotion image
네가 보물이 있는 위치를 알고 있다는걸 안다냥! 우리에게 알려주라냥!
 
"삐빅삐빅."
소울 곰이 정색을 하며 이상한 소리를 내기 시작했어요.
"냥?"
"혼저 옵서. 고냉이 같은 호랑이. 하지만 여기서부터는 쉽지 않을꺼라. 이 텃밭봥 단서를 찾아 보물의 위치를 알아보십서! 삐빅삐빅! NPC 모드 종료."
소울 곰은 아무일 없다는 듯이 새로온 손님들에게 커피를 팔기 시작했습니다. 순간 당황한 일행에게 정적이 흘렀지만, 문제를 풀어야 하기에 텃밭으로 향했습니다.
텃밭 앞에는 꽃이 심어져 있고 꽃마다 번호가 붙어 있습니다.
 
notion imagenotion image
 
2개의 텃밭이 있고, 각 텃밭의 주된 방향이 90도를 이루고 있습니다.
 
notion imagenotion image
 
텃밭의 비밀은 무엇일까요? 왜 이렇게 소울곰이 꽃을 키우고 있었을까요?
 
 

 

Eureka!

 
역시나 그 문제도 라이캣의 발목을 잡지 못했습니다. 만장굴(10000CAVE)에 도착한 일행은 동굴의 엄청난 깊이에 감탄했습니다. 박쥐들이 나오고, 길이 많아 해매이기도 했지만, 일행은 드디어 깊은 동굴의 끝에 도착했어요.
 
notion imagenotion image
 
동굴 끝에는 파이와 썬에 키에 맞게 작은 문고리가 있는 문이 있었습니다. 개리가 문을 열어보려 했지만 문은 미동도 하지 않았어요.
 
notion imagenotion image
 
개리가 문에 붙어있는 장식품을 힘을주어 눌러보자 장식물이 안으로 들어갔습니다. 누른 장식물은 다시 눌러 원상복구 할 수 있었어요.
다시 자세히 살펴보니, 처음에는 보이지 않았던 6번째 소울곰 문제에서 보았던 문양들이 장식물에 세겨져 있었습니다.
 
notion imagenotion image
 
문양을 보는 순간 라이캣은 큐브를 떠올렸습니다.
"혹시 큐브 문제가 아닐까냥?"
"큐브 문제라면, 큐브를 돌려 각 종류별로 맞추는 문제인가독? 큐브는 6면체, 모양은 8진법이 아닌가독? "
"문양이 있는 것으로 보아 지금까지 풀어왔던 문제들에 어떤 힌트가 있지 않을까 개굴?"
라이캣은 문제를 해결할 수 있는 여러가지 알고리즘들이 머릿속에 번뜩이며 조화를 이루었습니다.
 
notion imagenotion image