BOJ 28459 Judging Forbidden Moves

BOJ 28459 Judging Forbidden Moves

문제 링크:

문제 내용

생략

문제 풀이

스포일러

오목, 장목, 44금수, 33금수를 체크하는 함수를 각각 만듭니다. 이는 나중에 33금수를 재귀적으로 체크할 때 필요합니다.

흑돌을 뒀을 때 각각의 형태인지 판별은 다음과 같은 방법으로 할 수 있습니다. 아래에서 사용하는 패턴에서 ~B가 아닌 아무 공간(W, X, 또는 오목판 밖)을 의미합니다.

  • 오목: 새로 둔 흑돌을 중심으로 가로, 세로, 두 대각선의 네 방향에 대해 ~BBBBB~의 패턴이 존재하는지 판별합니다.
  • 장목: BBBBBB의 패턴이 존재하는지 판별합니다.
  • 열린4: ~XBBBBX~의 패턴이 존재하는지 판별합니다.
  • 44금수: 4는 ~?????~의 형태로, ?에는 B가 네 개, X가 한 개 있어야 합니다. 그런데 열린4는 이 패턴에 두 번 매치되나 하나로 세어야 하므로, 열린4의 개수를 따로 구해서 빼 줍니다. 그 개수의 총합이 2 이상이면 44금수입니다.
    • 주의해야 하는 예시로 BBBXXXBBB의 중간에 B를 놓는 경우 등이 있습니다.
    • 하나를 둬서 오목이 생겼는지 판별하려고 한다면 다음과 같은 경우 등을 주의해야 합니다.
    BX.BB
    XXXXX
    XXXXX
    XXBXX
    XXBXX
    XXBXX
    XXBXX
  • 33금수: 열린3을 판별하기 위해서는, 열린4의 형태가 고정되어 있으므로 열린4의 패턴의 B 중에서 하나가 제거된 형태인지를 판별하면 됩니다. 예제를 보면 거짓금수가 등장하는데, 어떤 열린3에서 돌을 놓아서 열린4를 만들려고 할 때 그 자리가 오목 또는 금수일 경우에는 원래의 열린3을 열린3의 개수에 세지 말아야 합니다. 위의 조건들을 모두 별개의 함수로 구현했다면 이는 간단히 재귀로 구현할 수 있습니다.
Last updated on