분류 전체보기(168)
-
dynamic programming 7 subset
문제는 더블릿 21 dynamic programming에 있는 subset입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/subset/subset.php?pname=subset N까지의 합을 반으로 나누었을 때 이 나뉘어진 반의 합이 같은 수인 경우의 수를 구하는 문제입니다.간단히 설명하면 1~N까지의 수의 합(N(N+1)/2)의 반이 되는 1~N까지의 합의 경우의 수를 구하고 반으로 나누면 됩니다. 예를 들어 입력으로 7이 들어왔을 경우 1~7까지의 합의 반은 14인데 1~7까지의 합 중에 14가 되는 경우의 수를 구하고 이의 반을 출력해주면 됩니다.이를 위해 각 수까지의 합의 경우의 수를 가지고 있는 배열을 선언해줍니다.ar[40]; 0까지의 수를 가지고 만들 수..
2015.02.03 -
배열 3 matti_block
문제는 더블릿 5 배열에 있는 matti_block입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/matti_block/matti_block.php?pname=matti_block 블록의 정면, 측면 사진이 있을 때 이러한 모양을 만들 수 있는 블록의 최소 수와 최대 수를 구하는 문제입니다. 최소수는 다음과 같이 구해질 수 있습니다.입력예를 보면4 2 0 3 11 1 2 3인데 높이 1짜리 인것이 정면에서 봤을 때 2개, 측면에서 봤을 때 1개 있습니다.그럼 최소한 높이 1짜리는 2개가 필요하단 것을 알 수 있습니다.높이 2는 각 한 개씩 있고 3도 한 개씩 있습니다.1짜리 2개, 2짜리 1개, 3짜리 1개. 각각 필요한 블록의 개수를 곱해서 다 더해주면 됩니다. 최..
2015.01.29 -
api 리버싱 2 - RtlNumberGenericTableElements, RtlIsGenericTableEmpty
이번에는 RtlNumberGenericTableElements라는 함수를 보겠습니다.앞의 것은 이전과 같으니 건너뛰고MOV EAX, DWORD PTR DS : [EAX+14]이것만 보겠습니다.EAX는 구조체에서 14 의 오프셋을 가진 위치입니다.이 위치를 eax에 넣고 eax는 리턴됩니다. retn이 4인걸로 봐서 리턴 값은 하나이고 함수의 이름을 보면 테이블 요소의 개수를 뜻하므로 이 수를 리턴하는 것으로 추측할 수 있습니다. 그런데 이 수는 eax에 저장되어 있고 이는 eax+14의 값이었으므로 앞의 구조체는 다음과 같이 수정 될 수 있습니다.struct TABLE{ UNKNOWN Member1;UNKNOWN_PTR Member2; UNKNOWN_PTR Member3;UNKNOWN_PTR Member..
2015.01.27 -
퀵 정렬, 이진검색, parametric search 1 aggressive
문제는 더블릿 10 퀵 정렬, 이진검색, parametric search에 있는 aggressive입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/aggressive/aggressive.php?pname=aggressive 우리의 위치와 소의 수가 주어졌을 때 소를 배치할 경우 소와 소의 가장 짧은 거리가 최대가 되는 때의 거리를 구하는 문제입니다. 1부터 입력받은 우리의 최대 위치까지 우선 정렬을 해야합니다. algorithm 헤더에 있는 sort를 이용했습니다. 이제 소를 놓을 수 있는 위치에 놓으면서 소와 소 끼리의 거리와 가능한지의 여부를 판단합니다.소와 소 끼리의 거리는 0과 우리의 최대 위치의 반 부터 시작합니다. 그럼 대략 처음 값은 500000000이 ..
2015.01.27 -
api 리버싱 1 - RtInitializeGenericTable
리버싱의 일부분으로 특정 api에 대해 정보를 찾는 방법을 알아보겠습니다.여기서는 ntdll.dll에 있는 윈도우 네이티브 api인 generic table api를 대상으로 합니다.그럼 generic table api에 포함되는 적절한 함수를 찾아야합니다. 이 때 필요한 것이 generic table api가 구현되어 있는 ntdll.dll과 dumpbin입니다. dumpbin을 위와 같이 사용하면 ntdll.dll의 함수목록이 나열되어있는 txt파일을 생성할 수 있습니다. 여기서 generic table api 중 하나인 RtlNumberGenericTableElements 함수를 볼 수 있습니다. api를 조사하는데 가장 좋은 출발점은 사용된 구조체를 살펴보는 것입니다. geneic table ap..
2015.01.26 -
queue(bfs) 2 horse_knight
문제는 더블릿 14 queue(bfs)에 있는 horse_knight입니다.문제 사이트 주소입니다.http://183.106.113.109/30stair/horse_knight/horse_knight.php?pname=horse_knight 장기의 마와 체스의 나이트가 있고 이동할 수 있는 방향은 동일한데 마는 가는 길에 장애물이 있으면 갈 수 없습니다. 이때 출발지점부터 모든 칸에 대해 나이트가 마보다 빨리 갈 수 있는 칸의 수를 구하는 것입니다. 두 말 모두 갈 수 없으면 세지 않고 나이트만 갈 수 있는 곳은 나이트가 빨리 갔다고 간주합니다. 여기서는 모든 칸에 대해 라는 말이 있으므로 큐를 이용한 bfs를 씁니다. 각 위치와 각 위치별 이동 카운트를 가진 클래스 이용한 큐를 생성합니다. 그리고 첫번..
2015.01.24