[SWEA] 2819. メッシュボードに接続されている数字[D 4]


📚 質問する


https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7I5fgqEogDFAXB&categoryId=AV7I5fgqEogDFAXB&categoryType=CODE&problemTitle=2819&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1
デルタ探索によるソート問題はDFS探索問題である.
すべての配列の位置を初期値としてDFSブラウズをそれぞれ行う.
再帰関数で7回探索し,順序を確認して返す.
アクセスによる重複除外
0から9に9を乗じた配列はできないので、アクセスをsetデータ型に設定して、値が同じかどうかを確認します.
setで確認するためには、変更できない資料型を含める必要があるため、リストは使用できません.
そこで、文字列に変換して入れます.

📒 コード#コード#

def recur(cur, y, x):
    if cur == 7:                # 7번째 순열을 다 돌았을 때
        string = str(visited)   # 값을 string으로 변환
        result.add(string)      # set 자료형으로 중복 제거하여 넣어준다.
        return

    for i in range(4):          # 델타 탐색
        ny = y + dy[i]
        nx = x + dx[i]
        if 0 <= ny < 4 and 0 <= nx < 4:     # 인덱스 초과하지 않는 범위에서
            visited[cur] = arr[ny][nx]
            recur(cur + 1, ny, nx)


dy = [0, 1, 0, -1]                      # 우 하 좌 상
dx = [1, 0, -1, 0]
for tc in range(1, int(input()) + 1):
    arr = [list(map(int, input().split())) for _ in range(4)]
    visited = [-1 for _ in range(7)]    # 탐색할 순열을 담는다.
    result = set()                      # 중복제거하여 값을 담아주기 위해 set 자료형 사용
    for i in range(4):                  # 초기값 세팅
        for j in range(4):
            recur(0, i, j)
    print(f'#{tc} {len(result)}')

🔍 結果