2021 Dev-Martching:Webバックエンド開発者(上半期):回転マトリクス枠-解Python 3
質問の表示 👈 クリック!
✔確定問題
数字を順番に書くマトリクスがあります.複数の矩形範囲[x 1,y 1,x 2,y 2]を含むクエリーを受け入れます.行列上に矩形をqueryの要素順にスナップし、枠線に存在する数字だけが時計回りに移動します.最小値を返します.
1回目の移動その状態で変わらない2回目の移動...なお、この状態でn回目の移動を行い、すべての移動の数字の中で最小の値を返す.
解✔方法
宣言位置をキー値、位置の数字を値とするディクソンデータボード
開始位置start=(i,j)は左上隅です.右、下、左、上から長方形を描き、数値を1つずつ移動します.
右:私は相変わらずです.j増加ごとに1
以下:jやはり.i増加1
左:相変わらずです.jマイナス1
上:jは相変わらずです.iマイナス1
次の値を開始位置の値とスワップし、セルを移動し続けます.交換のたびにmin関数を使用して最大値を更新します.
💡 に答える
✔確定問題
数字を順番に書くマトリクスがあります.複数の矩形範囲[x 1,y 1,x 2,y 2]を含むクエリーを受け入れます.行列上に矩形をqueryの要素順にスナップし、枠線に存在する数字だけが時計回りに移動します.最小値を返します.
1回目の移動その状態で変わらない2回目の移動...なお、この状態でn回目の移動を行い、すべての移動の数字の中で最小の値を返す.
宣言
ex) board[(1,1)] = 1 , board[(1,2)] = 2 .. ,board[(rows, colunms)] = rows*colunms
開始位置start=(i,j)は左上隅です.右、下、左、上から長方形を描き、数値を1つずつ移動します.
右:私は相変わらずです.j増加ごとに1
以下:jやはり.i増加1
左:相変わらずです.jマイナス1
上:jは相変わらずです.iマイナス1
次の値を開始位置の値とスワップし、セルを移動し続けます.交換のたびにmin関数を使用して最大値を更新します.
💡 完全なソースコード
def solution(rows, columns, queries):
answer = []
board, num = dict(), 1
for i in range(rows): #board[(위치)] = 위치에 있는 숫자
for j in range(columns):
board[(i+1, j+1)] = num
num += 1
for x1, y1, x2, y2 in queries:
start = (i, j) = (x1, y1) #첫 시작 위치
min_num = board[start] #최솟값
for n in [1, -1]:
for cnt in range(y2-y1):
j += n
board[start], board[i, j] = board[i, j], board[start]
min_num = min(min_num, board[start])
for cnt in range(x2-x1):
i += n
board[start], board[i, j] = board[i, j], board[start]
min_num = min(min_num, board[start])
answer.append(min_num)
return answer
Reference
この問題について(2021 Dev-Martching:Webバックエンド開発者(上半期):回転マトリクス枠-解Python 3), 我々は、より多くの情報をここで見つけました https://velog.io/@himinhee/2021-Dev-Matching-웹-백엔드-개발자상반기-행렬-테두리-회전하기-python3-풀이テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol