[2017 삼성 육목대회] 9. 효율적인 계산을 위한 함수 수정

각 대학별 상위 2팀을 모은 결승전이 8월 23일에 진행되는 걸로 결정되었습니다. 또한 이전에 제출한 프로그램으로 그대로 경쟁해야하는 것이 아니라, 일주일의 시간 동안 수정할 수 있게 되어서 예전에 시간이 없어서 못했던 것을 급하게 수정하고 있습니다.


Threat의 갯수를 판단하는 CountThreat 함수 / 놓으면 6목을 만들 수 있는 수가 있는지 확인하는 Find_Conn6Move / 상대의 승리를 막기 위해 반드시 두어야하는 자리들의 목록을 반환하는 Get_ForcedMove 함수


이 세 함수의 경우 이전에는 놓을 수 있는 모든 361개의 자리에 대해 Threat window를 확인하는 방식으로 계산했지만 사실 직전에 둔 수의 주변 window에 대해서만 계산을 하면 됩니다. 이렇게 될 경우 계산이 빠르게 됩니다.


CounThreat, Find_Conn6Move, Get_ForcedMove 함수가 추가로 직전의 나의 수, 상대의 수를 인자로 입력받게끔 수정해서 조금 더 빨리 계산할 수 있게 했습니다.


이전에는 Breadth = 4, Depth  = 5로 대략 5초 내로 계산이 이루어졌는데 지금은 Bradth = 4, Depth = 5의 경우 1초 내로 계산이 이루어지고 Breadth = 5, Depth = 6으로 계산했을 때 대략 10초 정도만에 답이 나왔습니다. 아주 조금만 더 수정하면 Breadth = 5, Depth = 6으로 탐색할 수 있을 것 같습니다.


다만 게임이 많이 길어질 경우 뜬금없이 프로그램이 오류를 냈습니다. 파일 입출력으로 착수를 로그로 찍어보니 Y의 좌표로 -1을 입력해서 발생한 오류로 보입니다. 코드를 다시 보며 버그를 바로 잡아야합니다.




  Comments