오프라인 테스트로 진행된 3차 코딩 테스트! (2차는 다른 유형의 시험이었기에 생략합니다.)
5문제가 출제되었으며, 3문제 이상을 맞춘 경우 통과였다고 합니다. 블로그에 따르면 1차와 난이도는 비슷하지만 조금 더 생각할 여지를 두는 문제들이 많았다고 합니다. 또 오프라인으로 푸는 문제였기 때문에 모르는 부분에 대한 검색이 불가능하여 체감 난이도는 더욱 올라갔을 거라고 생각됩니다. 이제부터 시작하겠습니다.
문제를 요약하면 진법 변환을 통해 얻어진 수를 m명이 말하는데, 그 길이가 2글자 이상인 경우 1글자씩 끊어서 말을 해야됩니다. 그 때 내가 말할 단어의 순서를 출력하는 문제입니다. 여기서 내가 미리 구해야 될 숫자가 1000개 이고, 플레이어는 100명이므로 아무리 값이 크다고 해도 내가 구해야될 숫자의 총 합 길이는 $1000 * 100 = 10^5$ 개를 넘지 않습니다. 따라서, 정말로 간단하게 모든 숫자를 길이가 $t*m$ 길이만큼 구한 다음, 앞에서부터 하나씩 골라 리턴하면 되는 간단한 문제입니다.
string change(int n, int no)
{
string c[] = { "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F" }, ret = "";
while (no)
{
int v = no % n;
ret = c[v] + ret;
no /= n;
}
return ret;
}
string solve(int n,int t,int m,int p)
{
p--;
string chk = "0";
for (int i = 1;;i++)
{
chk += change(n, i);
if (chk.length() >= m*t) break;
}
string ans = "";
for (int i = 0; i < t; i++, p += m) ans += chk[p];
return ans;
}