이 이야기는 일반적인 웹 개발이 아니라, 매우 강력한 제약사항에서의 변칙적인 개발을 다룹니다.
따라서, 이 글은 대부분의 개발보단 변칙적 개발에서 알고리즘의 활용으로 보시는게 좋을 것 같습니다.
왜냐하면, 공식 SDK측에서 URL은 정적 String만으로, Runtime에는 전혀 생성이 불가능하게 했기 때문이다.
운영체제에서, Paging은 메모리의 단편화를 막기 위하여 사용하는 기법이다.
이 기법에서, 메모리 주소 중 논리주소는 자세히 보면 아래와 같은 방식임을 아는 사람이 있을 것이다.
이 메모리의 논리주소 = (Page Number) * (Page Size) + Offset
살짝 비틀어보자. (Page Number)
는 이미 풀었던 문제이고, (Page Size)
는 질문의 갯수이며, Offset
은 지금 선택지 질문의 번호에서 1을 뺀 것으로 인식할 수 있다. 그럼 이제 아래 방법으로 치환해볼 수 있다.
이 질문에서 선택한 질문의 답 index = (지금까지 선택한 답변) * (질문의 총 Size) + 선택지
자세히는 귀납적으로 이끌어 낼 수 있다. 그러나 이 증명은 난잡하지만, 해본다면 간단하므로, SUM(Answer) = Index
라는 전제를 끌어내는 것이 필요해보인다.
그렇다면... 이제 bitmask
기법과 결합해보자. index들의 합 들 만을 계속 더한다면, 결국에는 0 <= idx < (질문) * (답변)
을 가지게 된다. 그것을 URL 한번에 보낸다면, 기존에 한질문에 한번씩 보내던 방식에 비하여 유저 입장에서 URL을 더 보낼 수 있게 된다.
...이는 결국 StringLoader의 4초 제약을 우회하여 뚫을 수 있는 방식이 될 수 있는 것으로 기대한다.