[SWEA] 2819. メッシュボードに接続されている数字[D 4]
8477 ワード
📚 質問する
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)}')
🔍 結果
Reference
この問題について([SWEA] 2819. メッシュボードに接続されている数字[D 4]), 我々は、より多くの情報をここで見つけました https://velog.io/@yunhlim/SWEA-2819.-격자판의-숫자-이어-붙이기-D4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol