[ BOJ / Python ] 2116번 주사위 쌓기

황승환·2022년 8월 12일
0

Python

목록 보기
435/498

이번 문제는 구현 문제로, 각 상황에서의 주사위들의 위와 아래를 결정하고 측면들 중 가장 큰 값들의 합을 구하는 방식으로 접근하였다. 1번 주사위의 위쪽면을 결정하고, 그 이후의 주사위들을 이전 주사위의 위쪽면을 보고 주사위들의 아래쪽면을 결정하였다. 아래쪽면을 결정하면, 위쪽면의 인덱스까지 찾아 두 인덱스를 제외한 나머지 면들 중 최댓값을 결과 변수에 계속해서 더하는 방식으로 해결할 수 있었다.

Code

n = int(input())
dices = [list(map(int, input().split())) for _ in range(n)]
# a-f b-d c-e -> 0-5 1-3 2-4
mapping = [5, 3, 4, 1, 2, 0]
answer = 0
def find_cur_top_idx(cur, before_top):
    cur_bottom_idx = dices[cur].index(before_top)
    return mapping[cur_bottom_idx]
def dice_stacking(idx):
    result = 0
    cur_max = 0
    cur_top = dices[0][idx]
    for i in range(6):
        if i == idx or i == mapping[idx]:
            continue
        cur_max = max(cur_max, dices[0][i])
    result += cur_max
    for i in range(1, n):
        cur_max = 0
        idx = find_cur_top_idx(i, cur_top)
        cur_top = dices[i][idx]
        for j in range(6):
            if j == idx or j == mapping[idx]:
                continue
            cur_max = max(dices[i][j], cur_max)
        result += cur_max
    return result
for i in range(6):
    answer = max(answer, dice_stacking(i))
print(answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글