-
[L.O.S] Level 26 - red_dragonWargame/L.O.S 2022. 12. 28. 04:42반응형
Level 26 - red_dragon을 풀어보자.
두 번째 dragon인데, 이전 문제보다는 쉬운 편이다.
id에는 길이 제한이, no에는 숫자만 입력할 수 있다는 제한이 있다.

<red_dragon의 php 코드 내용> 먼저 참 값을 입력하여 어떤 출력이 나타나는지 확인해보도록 하자.
id 파라미터에 값을 입력할 때, 길이 제한을 주의하며 참 값을 입력하니 Hello admin이 출력되었다.
아마도 테이블의 가장 상단에 admin이 존재하는 것 같다.

<참일 때 admin 입력> 이제 이 문제를 어떻게 해결할지 생각해보도록 하자.
필요한 정보는 php의 is_numeric 함수에 숫자뿐만 아니라, 공백 문자도 넣을 수 있다는 것이다.
이러한 사실을 이용해 Level 20에서 했던 방법으로 문제를 해결할 수 있다.
id의 길이 제한 조건에 맞춰 '||no>#을 입력해준다.
그리고 no에 %0a를 입력하여 개행 처리를 해준다면, 이 쿼리는 id=''||no>number 로 동작을 할 것이다.
아래의 사진을 보면, 정상적인 입력으로 동작해 Hello admin이 출력된 것을 확인할 수 있다.

<개행 문자를 활용한 입력> no의 범위를 구하기 위해 10의 제곱 단위로 수를 입력하였다.
Hello admin의 출력 결과를 확인하여, no이 1억과 10억 사이의 수라는 것을 알 수 있었다.

<no의 범위 확인> 이제 파이썬 코드를 작성해보도록 하자.
그런데 생각보다 no의 범위가 크고, 수 자체도 억 단위로 상당히 큰 편이다.
이것을 앞의 length를 구하는 것처럼 1씩 더해서 구한다면 시간이 오래 걸릴 것이다.
그래서 이번에는 이진 탐색을 이용해 no를 구해보도록 하겠다.
알고리즘을 잘 몰라 이진 탐색의 개념에 대해 검색을 해보고, 참고하여 코드를 작성하였다.
이 코드를 활용하여 no을 구하는 시간을 비약적으로 감소시킬 수 있었다.

<이진 탐색 알고리즘 코드> 
<no의 값> 구한 no의 값을 입력하니 RED_DRAGON Clear!가 출력되며 문제가 해결되었다.

<red_dragon 문제 완료> 반응형'Wargame > L.O.S' 카테고리의 다른 글
[L.O.S] Level 28 - frankenstein (0) 2022.12.31 [L.O.S] Level 27 - blue_dragon (0) 2022.12.30 [L.O.S] Level 25 - green_dragon (1) 2022.12.27 [L.O.S] Level 24 - evil_wizard (0) 2022.12.17 Level 23 - hell_fire (0) 2022.12.14