ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [L.O.S] Level 26 - red_dragon
    Wargame/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

    댓글

Designed by Tistory.