21608号:サメ小学校


質問する


21608号:サメ小学校

に近づく


  • 次の症例は分類しなければならない.このケースを計算するには、ソートプロセスも必要です.
  • 空き部屋で好きな学生は隣接する複数の位置にある
  • 1条件複数のエンクロージャがある場合は、隣接するスペースの中で最もスペース数の多い場所に
  • を指定します.
  • 2条件複数のエンクロージャがある場合、行番号最小のビット→列番号最小のビット
  • の形態の複雑なオーバーラップリストとディックシーケンスを十分に利用しなければならない.
  • ナビゲーションは、BFSの解読と同様であることができる.
  • 探索のインデックス位置は選定位置の場所で、それぞれTrueとFalseで判別したいのですが、3*3配列自体は0ではなく0に設定されていて、値で埋めておけば位置を選択できるので使い勝手はもっと簡単です.
  • マイコード

    # 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を使うよりずっと楽になるはずです.