17822 - 원판 돌리기
2022. 5. 3. 14:05ㆍ2022/BaekJoon_삼성 SW 역량 테스트 기출
N, M, T = map(int, input().split())
graph = []; xdk = []
for _ in range(N):
graph.append(list(map(int, input().split())))
for _ in range(T):
xdk.append(list(map(int, input().split())))
result = 0;
for n in range(T):
x = xdk[n][0]; d = xdk[n][1]; k = xdk[n][2]
# k번 회전
for i in range(N):
if (i+1)%x == 0:
if d == 0:
for _ in range(k):
graph[i].insert(0, graph[i].pop(-1))
elif d == 1:
for _ in range(k):
graph[i].append(graph[i].pop(0))
# 인접한 같은 수가 있는지 확인후 삭제
avg = 0; nearSameNo = False; make0List = []
for i in range(N):
for j in range(M):
# 원형이므로 한 행에서 처음과 끝은 붙어있다. -> 고려 OK
# 첫 열과 끝 열은 인점하지 않았으므로 0과 -1인덱스의 값을 고려할 필요 없다.
if graph[i][j] == 0:
continue
chkGraph = False
left = j-1; right = j+1; up = i-1
if right == M: right = 0
if graph[i][j] == graph[i][left]:
if [i, left] not in make0List:
make0List.append([i, left])
chkGraph = True
if graph[i][j] == graph[i][right]:
if [i, right] not in make0List:
make0List.append([i, right])
chkGraph = True
if up != -1 and graph[i][j] == graph[up][j]:
if [up, j] not in make0List:
make0List.append([up, j])
chkGraph = True
if chkGraph == True:
make0List.append([i, j])
nearSameNo = True
for ij in make0List:
i = ij[0]; j = ij[1]
graph[i][j] = 0
# 인접한 수가 없는 경우에는 평균보다 작은 수는 +1, 큰 수는 -1
if nearSameNo == False:
num = []
for i in range(N):
for j in range(M):
if graph[i][j] != 0:
num.append(graph[i][j])
if len(num) == 0:
avg = 0
else:
avg = round(float(sum(num)/len(num)), 4)
for i in range(N):
for j in range(M):
if graph[i][j] != 0 and graph[i][j] > avg:
graph[i][j]-=1
elif graph[i][j] != 0 and graph[i][j] < avg:
graph[i][j]+=1
for i in range(N):
result+=sum(graph[i])
print(result)
'2022 > BaekJoon_삼성 SW 역량 테스트 기출' 카테고리의 다른 글
20058 - 마법사 상어와 파이어스톰 (0) | 2022.05.03 |
---|---|
20057 - 마법사 상어와 토네이도 (0) | 2022.05.03 |
17144 - 미세먼지 안녕! (0) | 2022.05.03 |
16236 - 아기상어* (0) | 2022.05.03 |
14890 - 경사로* (0) | 2022.05.03 |