SWEA

SWEA 2382. 미생물 격리 [Python]

Hoo_Dev 2022. 3. 25. 19:39
di, dj = (0, -1, 1, 0, 0), (0, 0, 0, -1, 1)
opp = [0, 2, 1, 4, 3]
T = int(input())
for tc in range(1, T + 1):
    N, M, K = map(int, input().split())  # N : 셀의 갯수, M : 격리 시간, K : 미생물 군집의 개수
    arr = [list(map(int, input().split())) for _ in range(K)]
    for _ in range(M):
        for idx in range(len(arr)):
            arr[idx][0] += di[arr[idx][3]]
            arr[idx][1] += dj[arr[idx][3]]
            if arr[idx][0] == 0 or arr[idx][0] == N - 1 or arr[idx][1] == 0 or arr[idx][1] == N - 1:
                arr[idx][2] = arr[idx][2] // 2
                arr[idx][3] = opp[arr[idx][3]]

        arr.sort(key=lambda x: (x[0], x[1], x[2]), reverse=True)

        i = 1
        while i < len(arr):
            if arr[i - 1][0] == arr[i][0] and arr[i - 1][1] == arr[i][1]:
                arr[i - 1][2] += arr[i][2]
                arr.pop(i)
            else:
                i += 1

    ans = 0
    for i in range(len(arr)):
        ans += arr[i][2]

    print('#{} {}'.format(tc, ans))

 

주의해야 할 부분은 3번째 for문을 실행 시 주어진 상수인 K를 사용하여 순회시킬 때, 아래 결과에서 배열의 pop을 통해 삭제가 이뤄지므로 가변적인 len(arr)을 통해 순회를 시켜줘야 함.

sort를 생각을 해내는 부분이 어렵다고 느낌.