[BOJ/Python]17140号2次元配列と演算
この問題は,当時の行と列の長さを計算することによって与えられたRとC演算を実現する問題である.まずdefaultdictを用いて行または列の数の出現を計算し、defaultdictを巡回してkeyおよびvalueをtupflo一時リストに格納し、lambdaを用いてこれらの一時リストをx[1]、x[0]の優先度で昇順に並べ替える.次に、一時リストを巡回し、結果リストにtupleのUnpacking値を入れ、行または列が整列した行または列を生成します.このプロセスはリスト全体で順番に行われます.このとき最大長さを求め、最大長さより小さい0をリストに埋め、0を埋めた後、長さが100より大きい場合は100に切り取る.
インデックスエラーが発生し続けます.これは、
a[r][c]
をチェックしたときに、行、列の長さがr、cより小さいときに発生します.歯を探すのにずいぶん時間がかかった.この部分は、検査前に、a[r][c]
を検査し、解決するために、行および列の長さがr、cより大きい場合にのみ検査する.->lstをリストとして宣言します.
->aの長さが繰り返されるiのfor文.
-->dは
defaultdict(int)
と発表された.-->
a[0]
の長さはjのfor文を繰り返す.-->
a[i][j]
が0の場合、続行します.-->
d[a[i][j]]
増加1.-->結果をリストにします.
-->d巡回のkey,valueのfor文.
----->結果に
(key, value)
を加えます.-->
key=lambda x: (x[1], x[0])
を使用して結果をソートします.-->テンポラリリストtmpを宣言します.
-->結果を返すx,yのfor文.
----->tmpに
[x, y]
を貼り付けます.-->lstにtmpを入れます.
->最大長を格納する変数mxlが0であることを宣言します.
->lstの長さが繰り返されるiのfor文.
-->mx lをmx lおよび
len(lst[i])
より大きい値に更新します.->lstの長さが繰り返されるiのfor文.
-->
lst[i]
プラスmx_l-len(lst[i])
個[0]
.-->
len(lst[i])
が100より大きい場合、-->
lst[i]
がlst[i][:100]
に更新されました.->lstを返します.
->lstをリストとして宣言します.
->aの長さが繰り返されるiのfor文.
-->dは
defaultdict(int)
と発表された.-->
a[0]
の長さはjのfor文を繰り返す.-->
a[i][j]
が0の場合、続行します.-->
d[a[i][j]]
増加1.-->結果をリストにします.
-->d巡回のkey,valueのfor文.
----->結果に
(key, value)
を加えます.-->
key=lambda x: (x[1], x[0])
を使用して結果をソートします.-->テンポラリリストtmpを宣言します.
-->結果を返すx,yのfor文.
----->tmpに
[x, y]
を貼り付けます.-->lstにtmpを入れます.
->最大長を格納する変数mxlが0であることを宣言します.
->lstの長さが繰り返されるiのfor文.
-->mx lをmx lおよび
len(lst[i])
より大きい値に更新します.->lstの長さが繰り返されるiのfor文.
-->
lst[i]
プラスmx_l-len(lst[i])
個[0]
.-->
len(lst[i])
が100より大きい場合、-->
lst[i]
がlst[i][:100]
に更新されました.->r lstは
(len(lst[0])*len(lst))
サイズが0のリストです.->lstの長さが繰り返されるiのfor文.
-->
lst[0]
の長さはjのfor文を繰り返す.-->
r_lst[j][i]
がlst[i][j]
に更新されました.->r lstが戻ります.
->
len(a)
がrより大きく、len(a[0])
がcより大きい場合、-->
a[r][c]
がkの場合、----->while文を閉じます.
->答えが100より大きい場合は、
-->答えを-1に更新します.
-->while文を閉じます.
->
len(a)
がlen(a[0])
以上の場合、-->aは
cul_r()
の戻り値に更新されます.->その他の場合、
-->aは
cul_c()
の戻り値に更新されます.->答えを1つ増やします.
Code from collections import defaultdict
r, c, k=map(int, input().split())
a=[list(map(int, input().split())) for _ in range(3)]
r, c=r-1, c-1
answer=0
def cul_r():
lst=[]
for i in range(len(a)):
d = defaultdict(int)
for j in range(len(a[0])):
if a[i][j]==0:
continue
d[a[i][j]]+=1
result=[]
for key, value in d.items():
result.append((key, value))
result.sort(key=lambda x: (x[1], x[0]))
tmp=[]
for x, y in result:
tmp+=[x, y]
lst.append(tmp)
mx_l=0
for i in range(len(lst)):
mx_l=max(mx_l, len(lst[i]))
for i in range(len(lst)):
lst[i]+=[0]*(mx_l-len(lst[i]))
if len(lst[i])>100:
lst[i]=lst[i][:100]
return lst
def cul_c():
lst=[]
for i in range(len(a[0])):
d = defaultdict(int)
for j in range(len(a)):
if a[j][i]==0:
continue
d[a[j][i]]+=1
result=[]
for key, value in d.items():
result.append((key, value))
result.sort(key=lambda x: (x[1], x[0]))
tmp=[]
for x, y in result:
tmp += [x, y]
lst.append(tmp)
mx_l = 0
for i in range(len(lst)):
mx_l = max(mx_l, len(lst[i]))
for i in range(len(lst)):
lst[i]+=[0]*(mx_l-len(lst[i]))
if len(lst[i])>100:
lst[i]=lst[i][:100]
r_lst=[[0 for _ in range(len(lst))] for _ in range(len(lst[0]))]
for i in range(len(lst)):
for j in range(len(lst[0])):
r_lst[j][i]=lst[i][j]
return r_lst
while True:
if len(a)>r and len(a[0])>c:
if a[r][c]==k:
break
if answer>=100:
answer=-1
break
if len(a)>=len(a[0]):
a=cul_r()
else:
a=cul_c()
answer+=1
print(answer)
Reference
この問題について([BOJ/Python]17140号2次元配列と演算), 我々は、より多くの情報をここで見つけました
https://velog.io/@xx0hn/BOJ-Python-17140번-이차원-배열과-연산
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
from collections import defaultdict
r, c, k=map(int, input().split())
a=[list(map(int, input().split())) for _ in range(3)]
r, c=r-1, c-1
answer=0
def cul_r():
lst=[]
for i in range(len(a)):
d = defaultdict(int)
for j in range(len(a[0])):
if a[i][j]==0:
continue
d[a[i][j]]+=1
result=[]
for key, value in d.items():
result.append((key, value))
result.sort(key=lambda x: (x[1], x[0]))
tmp=[]
for x, y in result:
tmp+=[x, y]
lst.append(tmp)
mx_l=0
for i in range(len(lst)):
mx_l=max(mx_l, len(lst[i]))
for i in range(len(lst)):
lst[i]+=[0]*(mx_l-len(lst[i]))
if len(lst[i])>100:
lst[i]=lst[i][:100]
return lst
def cul_c():
lst=[]
for i in range(len(a[0])):
d = defaultdict(int)
for j in range(len(a)):
if a[j][i]==0:
continue
d[a[j][i]]+=1
result=[]
for key, value in d.items():
result.append((key, value))
result.sort(key=lambda x: (x[1], x[0]))
tmp=[]
for x, y in result:
tmp += [x, y]
lst.append(tmp)
mx_l = 0
for i in range(len(lst)):
mx_l = max(mx_l, len(lst[i]))
for i in range(len(lst)):
lst[i]+=[0]*(mx_l-len(lst[i]))
if len(lst[i])>100:
lst[i]=lst[i][:100]
r_lst=[[0 for _ in range(len(lst))] for _ in range(len(lst[0]))]
for i in range(len(lst)):
for j in range(len(lst[0])):
r_lst[j][i]=lst[i][j]
return r_lst
while True:
if len(a)>r and len(a[0])>c:
if a[r][c]==k:
break
if answer>=100:
answer=-1
break
if len(a)>=len(a[0]):
a=cul_r()
else:
a=cul_c()
answer+=1
print(answer)
Reference
この問題について([BOJ/Python]17140号2次元配列と演算), 我々は、より多くの情報をここで見つけました https://velog.io/@xx0hn/BOJ-Python-17140번-이차원-배열과-연산テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol