[백준] 1041 : 주사위 - Python

Chooooo·2023년 1월 30일
0

알고리즘/백준

목록 보기
31/182
post-thumbnail

import sys
sys.stdin = open("input.text", "rt")

#보여지는 면의 수에 따라서 생각해야함.
N = int(input())
data =  list(map(int, input().split()))

res = 0
minList = []  #마주보는 면 중 최솟값 저장용 리스트
if N == 1:
    data.sort()
    for i in range(5):
        res += data[i]
else:  #개수 여러개로 정육면체
    minList.append(min(data[0], data[5]))
    minList.append(min(data[1], data[4]))
    minList.append(min(data[2], data[3]))

    #면이 1개, 2개, 3개 보이는 걸로 나눠서
    minList.sort()
    ss1 =minList[0]  #1면만 보여질 때 사용
    ss2 = minList[0] + minList[1]  #2면만 보여질 때 사용
    ss3 = sum(minList)     #3면만 보여질 때 사용

    #이제 각 면이 보여진 개수
    c1 = (N-2) * (N-1) * 4 + (N-2) * (N-2)
    c2 = (N-1) * 4 + (N-2) * 4
    c3 = 4

    res += ss1 * c1
    res += ss2 * c2
    res += ss3 * c3

print(res)

❤ 코멘트
해당 문제는 해석하는 것부터 어려웠다. N^3 주사위로 정육면체를 만들어서 6면 중 밑면 제외 5면에서 보이는 주사위 수 합의 최솟값을 구해야 했다.
생각을 해보면 보여지는 주사위의 면 수는 1면이 보이거나 2면이 보이거나 3면이 보이거나 3가지 경우 뿐이었다. 또한 각 면이 보이는 개수는 정해져 있기에 각 최솟값을 구해야 하는데
마주보는 값들 두 값 중 최솟값을 정해놓고 활용하면 됐다.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글