- 문제 : 2382. 미생물 격리
- 난이도 : 모의 SW 역량테스트
- 언어 : python
- 문제 링크 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV597vbqAH0DFAVl
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를 생각을 해내는 부분이 어렵다고 느낌.
'SWEA' 카테고리의 다른 글
SWEA 1486. 장훈이의 높은 선반 [Python] (0) | 2022.03.27 |
---|---|
SWEA 4615. 재미있는 오셀로 게임 [Python] (0) | 2022.03.27 |
SWEA 1861. 정사각형방 [Python] (0) | 2022.03.24 |
SWEA 1238. Contact [Python] (0) | 2022.03.24 |
SWEA 5105. 미로의 거리 [Python] (0) | 2022.03.24 |