21608号:サメ小学校
質問する
21608号:サメ小学校
に近づく
マイコード # BOJ 21608번: 상어 초등학교
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
n = int(input())
n_square = n ** 2
students = [list(map(int, input().split())) for _ in range(n_square)]
arr = [[0] * n for _ in range(n)]
for s in range(n_square):
tmp = []
for i in range(n):
for j in range(n):
sumLike, sumEmpty = 0, 0
if arr[i][j] != 0:
continue
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if nx < 0 or nx > n-1 or ny < 0 or ny > n-1:
continue
if arr[nx][ny] in students[s][1:]:
sumLike += 1
if arr[nx][ny] == 0:
sumEmpty += 1
tmp.append((sumLike, sumEmpty, (i, j)))
tmp.sort(key=lambda x: (-x[0], -x[1], x[2]))
arr[tmp[0][2][0]][tmp[0][2][1]] = students[s][0]
# print(arr)
# print(students)
likes = {}
for i in range(n_square):
tmp = students[i][0]
likes[tmp] = students[i][1:]
# print(likes)
result = 0
for i in range(n):
for j in range(n):
cnt = 0
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if nx < 0 or nx > n - 1 or ny < 0 or ny > n - 1:
continue
if arr[nx][ny] in likes[arr[i][j]]:
cnt += 1
continue
if cnt != 0:
result += 10 ** (cnt - 1)
print(result)
if arr[nx][ny] in students[s][1:]:
のように、in
は含めるかどうかを簡単に抽出できるので、それをどのように利用するかを練習すべきです.また、likes[tmp] = students[i][1:]
のようにリスト線を引くのも便利です.また、keyによって並べ替えられる部分がとても便利です.
//最近、SKは初めてのコードテスト当日からPythonを使っていますが、文法だけを熟知していればJavaを使うよりずっと楽になるはずです.
Reference
この問題について(21608号:サメ小学校), 我々は、より多くの情報をここで見つけました
https://velog.io/@songs4805/BOJ21608번-상어-초등학교
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
# BOJ 21608번: 상어 초등학교
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
n = int(input())
n_square = n ** 2
students = [list(map(int, input().split())) for _ in range(n_square)]
arr = [[0] * n for _ in range(n)]
for s in range(n_square):
tmp = []
for i in range(n):
for j in range(n):
sumLike, sumEmpty = 0, 0
if arr[i][j] != 0:
continue
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if nx < 0 or nx > n-1 or ny < 0 or ny > n-1:
continue
if arr[nx][ny] in students[s][1:]:
sumLike += 1
if arr[nx][ny] == 0:
sumEmpty += 1
tmp.append((sumLike, sumEmpty, (i, j)))
tmp.sort(key=lambda x: (-x[0], -x[1], x[2]))
arr[tmp[0][2][0]][tmp[0][2][1]] = students[s][0]
# print(arr)
# print(students)
likes = {}
for i in range(n_square):
tmp = students[i][0]
likes[tmp] = students[i][1:]
# print(likes)
result = 0
for i in range(n):
for j in range(n):
cnt = 0
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if nx < 0 or nx > n - 1 or ny < 0 or ny > n - 1:
continue
if arr[nx][ny] in likes[arr[i][j]]:
cnt += 1
continue
if cnt != 0:
result += 10 ** (cnt - 1)
print(result)
Reference
この問題について(21608号:サメ小学校), 我々は、より多くの情報をここで見つけました https://velog.io/@songs4805/BOJ21608번-상어-초등학교テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol