Coding Test/baekjoon

[백준 1041] 주사위 - python (solved.ac - 골드 5)

조용장 2022. 5. 9. 09:28

https://www.acmicpc.net/problem/1041

 

1041번: 주사위

첫째 줄에 N이 주어진다. 둘째 줄에 주사위에 쓰여 있는 수가 주어진다. 위의 그림에서 A, B, C, D, E, F에 쓰여 있는 수가 차례대로 주어진다. N은 1,000,000보다 작거나 같은 자연수이고, 쓰여 있는 수

www.acmicpc.net

풀이

문제를 보았을때 알수있는 힌트

문제를 이해하고 주사위의 특징을 생각하면서 문제를 풀면 조금이나마 쉽게 풀린다.

주사위의 최소 값을 총 3개로 볼수있는데 1개만 보이는 경우, 2개가 보이는 경우, 3개가 보이는 경우이다. 이때 2,3개는 주사위가 붙어 있다는 조건이 있다.

2개의 경우 붙어있는 2개의 경우의 수를 찾아서 최소 값을 준비한다.

3개의 경우 A,F 중 한개, D,C 중 한개, B,E 중 한개 최소인 값을 뽑아서 더하면 된다.

이렇게 세팅이 되었다면 주사위를 쌓았을때 겉에 면만 보고 생각하면된다.

3개의 경우는 맨 위층의 주사위 면 각 꼭지점에 해당한다. 총 4개만 존재한다.

2개의 경우 주사위의 모서리 면에 해당하고 1의 경우는 그 나머지 것들이 된다.

 

이를 N이 2개일때, 3개일때, 4개일때까지 해보면 관련 조건이 나오는게 그 조건을 통해 문제를 푼다면 답이 될것이다.

 

import sys

input =sys.stdin.readline

n = int(input())

n_list=list(map(int,input().split()))
a= [[0,5],[1,4],[2,3]]
if n==1:
    print(sum(n_list)-max(n_list))

else:
    total=n**3-(n-2)*(n-2)*(n-1)
    n_1= min(n_list)
    temp_2=[]
    for i in range(6):
        for j in range(i+1,6):
            if [i,j] not in a:
                temp_2.append(n_list[i]+n_list[j])
    n_2=min(temp_2)
    n_3= min(n_list[0],n_list[5])+min(n_list[1],n_list[4])+min(n_list[2],n_list[3])
    print(n_3*4+n_2*(4*(n-1)+4*(n-2))+n_1*(total-4-(4*(n-1)+4*(n-2))))

https://github.com/dydwkd486/coding_test/blob/main/baekjoon/baekjoon1041.py

 

GitHub - dydwkd486/coding_test: 코딩테스트 공부한 내용 정리

코딩테스트 공부한 내용 정리. Contribute to dydwkd486/coding_test development by creating an account on GitHub.

github.com