https://www.codetree.ai/frequent-problems/artistry/description
코드트리
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
# 예술성
# 상 좌 하 우
dr = [-1, 0, 1, 0]
dc = [0, -1, 0, 1]
N = int(input())
numbers = [list(map(int, input().split())) for _ in range(N)]
score = 0
# 4번 반복
for _ in range(4):
# 그룹 만들기
groups = list()
visited = [[0] * N for _ in range(N)]
for r in range(N):
for c in range(N):
if visited[r][c] == 0:
temp_queue = list()
visited[r][c] = numbers[r][c]
queue = [[r, c]]
while queue:
cur_r, cur_c = queue.pop(0)
temp_queue.append([cur_r, cur_c, numbers[r][c]])
for i in range(4):
cr = cur_r + dr[i]
cc = cur_c + dc[i]
if 0 <= cr < N and 0 <= cc < N and visited[cr][cc] == 0 and numbers[r][c] == numbers[cr][cc]:
visited[cr][cc] = numbers[cr][cc]
queue.append([cr, cc])
groups.append(temp_queue)
# 그룹 1
temp_score = 0
for i in range(len(groups)):
# 그룹 2
for j in range(i + 1, len(groups)):
if i != j:
find_num = groups[j][0][-1]
stick_cnt = 0
for temp_r, temp_c, _ in groups[i]:
for idx in range(4):
cr = temp_r + dr[idx]
cc = temp_c + dc[idx]
# 변 갯수 세기
if 0 <= cr < N and 0 <= cc < N and [cr, cc, find_num] in groups[j]:
stick_cnt += 1
temp_score = ((len(groups[i]) + len(groups[j])) * groups[i][0][-1] * find_num * stick_cnt)
score += temp_score
# 회전시키기
temp_numbers = [nu[:] for nu in numbers]
# 십자 모양 -> 통째로 반시계 회전
for r in range(N):
for c in range(N):
if r == (N // 2) or c == (N // 2):
numbers[N - 1 - c][r] = temp_numbers[r][c]
# 십자 모양 제외한 4개의 정사각형 -> 개별적으로 시계방향으로 90도씩 회전
else:
# 위
if r < N // 2:
# 좌
if c < N // 2:
numbers[r][c] = temp_numbers[((N - 3) // 2) - c][r]
# 우
else:
numbers[r][c] = temp_numbers[N - 1 - c][(N // 2) + 1 + r]
# 아래
else:
# 좌
if c < N // 2:
numbers[r][c] = temp_numbers[N - 1 - c][r - (N // 2) - 1]
# 우
else:
# 칸수 + N + 1 - c
numbers[r][c] = temp_numbers[((N - 3) // 2) + N + 1 - c][r]
print(score)
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[Python] 백준 21610 마법사 상어와 비바라기 (0) | 2022.10.14 |
---|---|
[Python] 코드트리 2022-1 오후 꼬리잡기놀이 (0) | 2022.10.14 |
[Python] 백준 21609 상어 중학교 (0) | 2022.10.13 |
[Python] 백준 21608 상어 초등학교 (0) | 2022.10.12 |
[Python] 백준 20057 마법사 상어와 토네이도 (0) | 2022.10.11 |