SWEA 2382 미생물 격리(with Python)

daeungdaeung·2021년 10월 9일
0
import sys
sys.stdin = open(r'/Users/kangdaeyoung/Downloads/sample_input (3).txt', 'r')

T = int(input())

directions = {
    1: [-1, 0],
    2: [1, 0],
    3: [0, -1],
    4: [0, 1],
}

change_directions = {
    2: 1,
    1: 2,
    4: 3,
    3: 4,
}

for tc in range(1, 1+T):
    # N: 변 길이, N: 주어진 시간, K: 군집 개수
    N, M, K = map(int, input().split())

    microorganisms = [list(map(int, input().split())) for _ in range(K)]

    for time in range(M):
        # 1. 각 군집을 이동
        tmp_dict = {}
        len_microorganisms = len(microorganisms)
        for _ in range(len_microorganisms):
            r, c, nums, d = microorganisms.pop()
            dr, dc = directions[d]
            r += dr
            c += dc
            # 약품 구간에 들어간 경우 처리
            if (
                r < 1 or
                r >= N-1 or
                c < 1 or
                c >= N-1
            ):
                nums //= 2
                d = change_directions[d]
            # 2. 해쉬 형태로 각 군집을 저장하기 => 같은 위치에 있는 경우 처리를 위해서
            if tmp_dict.get(r):
                if tmp_dict[r].get(c):
                    tmp_dict[r][c].append([nums, d])
                else:
                    tmp_dict[r][c] = [[nums, d]]
            else:
                tmp_dict[r] = {c: [[nums, d]]}
        # 3. 합쳐진 군집들 처리하기 & 해쉬 형태 => 리스트 형태로 바꾸기
        for k1, v1 in tmp_dict.items():
            for k2, v2 in v1.items():
                if len(v2) >= 2:
                    v2.sort(reverse=True)
                    d = v2[0][1]
                    nums = 0
                    for i in range(len(v2)):
                        nums += v2[i][0]
                    microorganisms.append([k1, k2, nums, d])
                else:
                    microorganisms.append([k1, k2, v2[0][0], v2[0][1]])

    answer = 0
    for microorganism in microorganisms:
        answer += microorganism[2]
    print(f'#{tc} {answer}')
profile
개발자가 되고싶읍니다...

0개의 댓글