be prepared! codingTest/SuNiNaTaS

challenge-level1

그라파나 2022. 5. 16. 11:05

 

str = "admin"
result = str.replaceAll("a","aad");
result = result.replaceAll("i","in");
result1 = result.substr(1,2);
result2 = result.substr(3,6);

http://suninatas.com/challenge/web01/web01.asp

<%
    str = Request("str")

    If not str = "" Then
        result = Replace(str,"a","aad")
        result = Replace(result,"i","in")
        result1 = Mid(result,2,2)
        result2 = Mid(result,4,6)
        result = result1 & result2
        Response.write result
        If result = "admin" Then
            pw = "????????"
        End if
    End if
%>

보자마자 아니 이게 뭐야싶었다.

 

문제가 참 불친절하다는 생각을 했다가 나는 이제 개발자라는 것을 다시금 인지했다.

 

일단 코드부터 읽어보자.

str이라는 녀석을 받았는데, 
얘가 ""이 아니면 result라는 값에서 "a"가 있으면 "add"로 바꾸고
result에 "i"가 있으면 "in"으로 바꾼다.
result1 은 Mid라는 함수를 써서 result에서 2,2를 넣어라
result2 는 Mid라는 함수를 써서 result에서 4,6을 넣어라.
result 의 값은 result1과 result2를 합친다.
result가 "admin"이면 pw ="????????"이다.

나는 Mid라는 함수를 처음본다. SQL에서 비슷한거 봤던거 같긴하지만

 

긴가민가 할때는 찾아보는게 답이다.

 

스크립틀릿을 쓰고 있어서 Java에서 찾아봤는데 해당함수는 존재하지 않았다.

 

일단 Mid라는 함수가 어떻게 동작하는지 부터 알아야 했다.

 

개발자모드를 켰다.

소스와 주소창을 보면 해당 파일은 web01.asp인 것을 알 수 있다.

 

.asp는 처음봤다. 구글신의 도움을 빌려보았다.https://namu.wiki/w/ASP

뭔진 잘 모르겠는데 스크립트 엔진이란다. VB스크립트 언어를 쓴다는 내용이 있었다.VB Mid 함수로 검색해 보았다.  

 

Strings.Mid 메서드 (Microsoft.VisualBasic)

지정된 문자열에서 문자를 포함하는 문자열을 반환합니다.

docs.microsoft.com

해당 예문에서 "Mid Function Demo" 의 1,3이 "Mid" 라고 했다.Start는 1부터 시작된다고 했다. (다른 언어들이 그렇듯 0부터 시작하는게 아니라) 그렇다면 뒤에 3은 3글자를 뜻하는 것일까?

 

해당 예문에서 "Mid Function Demo" 의 14,4이 "Demo" 라고 했다.

확실해 졌다. ","뒤에는 숫자는 글자 수를 뜻한다.

 

그렇다면 다시 알아보자.

str이라는 녀석을 받았는데, 
얘가 ""이 아니면 result라는 값에서 "a"가 있으면 "aad"로 바꾸고
result에 "i"가 있으면 "in"으로 바꾼다.
result1 은 result에서 2번째 글자부터, 2개의 글자를 뽑는다.
result2 는  result에서 4번째 글자부터, 6개의 글자를 뽑는다.
result 의 값은 result1과 result2를 합친다. 문자열이다.
result가 "admin"이면 pw ="????????"이다.

동작내용을 모두 알았으니 눈으로 보는게 빠를것 같아서 js로 돌려봤다.request.str는 "admin"으로 설정해보았다.

str = "admin"
result = str.replaceAll("a","aad");
result = result.replaceAll("i","in");
result1 = result.substr(1,2);
result2 = result.substr(3,6);
result = result1 + result2;
console.log(result);
if(result =="admin")
	console.log("clear");

결과는 "addminn"

substr()을 쓸 때 인덱스번호를 하나씩 빼주었다. (substr은 0부터 시작하고, Mid()는 1부터 시작하기때문에 )

 

그럼 admin이 출력되게 하려면 어떻게 해야할까?  왠지 반대로 해보면 될것같았다.

합친 문자열 분리 admin = ad + min

글자열 뽑기1 result1 = something.substr(1,2) = ad

글자열 뽑기2 result2 = something.substr(3,6) = min

ad + min

01 + 234 이다. 자리수를 맞춰보면

*ad+min*

012 +3456이면 된다. 

"admin" 의 min 뒤에는 글자가 없다. 따라서 뒤에 *를 없애면 총 6글자가 된다.

*admin -> length 6

 

뒤에는 i를 in으로 바꿔서 min이 나와야 하니까

in앞에는 당연히 m이 붙어야 한다.

그렇다면 aadmin의 6글자.

aadmin을 다시 치환하자.

ad(1,2) -> in.replaceAll("a","aad") -> a

min(3,6) -> min.replaceAll("i","in")-> mi

따라서 최초 입력해야할 리퀘스트의 str은 *방탄소년단의 팬클럽의 이름. 그 것이다! 

 

해당 결과를 입력해보자.

다음과 같은 알람이 뜨고, 아래 Authkey 부분에 코드가 뜬다. 복사하자.

인증키가 뜬다. -> 직접 해보시길.

여기에 인증키를 복사해서 붙여 넣으면

문송이는 100pt(을)를 얻었다..!

드디어 한 문제 풀었다. (MId가 뭔지 몰라서 1시간 넘게 걸린건 안자랑)

 

모든 문제를 풀고 문송이가 문송하지 않을 그 날이 오기까지 

 

가즈아ㅏㅏㅏ

제발 ㅠ

 

'be prepared! codingTest > SuNiNaTaS' 카테고리의 다른 글

challenge-level4  (0) 2022.05.16
challenge-level3  (0) 2022.05.16