백준 파이썬 1041 주사위
https://www.acmicpc.net/problem/1041
1041번: 주사위
첫째 줄에 N이 주어진다. 둘째 줄에 주사위에 쓰여 있는 수가 주어진다. 위의 그림에서 A, B, C, D, E, F에 쓰여 있는 수가 차례대로 주어진다. N은 1,000,000보다 작거나 같은 자연수이고, 쓰여 있는 수
www.acmicpc.net
https://kkk4872.tistory.com/130
파이썬 그리디 알고리즘 백준 1041 주사위
문제 주사위는 위와 같이 생겼다. 주사위의 여섯 면에는 수가 쓰여 있다. 위의 전개도를 수가 밖으로 나오게 접는다. A, B, C, D, E, F에 쓰여 있는 수가 주어진다. 지민이는 현재 동일한 주사위를 N^
kkk4872.tistory.com
해당 블로그를 참고하였습니다.
생각이상으로 어지러운 문제였다.
N*N*N의 정육면체라니 어떻게 해결하지? 라는 생각을 했는데 도저히 뭐 어쩌라는건지 몰라서
직접 정육면체를 그려보기도 하였습니다.
풀이 자체는 매우 쉬웠습니다.
n = 3이라 생각하고 문제를 풀이하였을떄
면체가 하나만 나왔을떄
두개가 나왔을떄
세개가 나왔을떄
의 경우로 나눌수 있었습니다.
세면이 나오는 경우는 무조건 각 위의 모서리 4개가 고정이기 떄문에
n3 = 4 로 이뤄집니다.
두면이 나왔을 떄는 해당 큐브의 가로부분의 중앙과 맨 밑부분의 모서리를 보면 됩니다.
맨위를 제외한 끝자리 두면의 계수는 (n-1)*4 입니다.
또한 세로부분의 두면의 계수를 더해주면 됩니다. (n-2)*4
n2 = (n-1)*4 + (n-2)*4
한면의 경우도 비슷합니다. (n-1)*(n-2) = 맨밑면 중앙, 중앙 * 4를 하시면 됩니다.
그리고 최상단 가운데를 더하시면 n1의 값이 나옵니다.
n1 = (n-2)*(n-2) + (n-1)*(n-2)*4
이제 주사위의 값을 잘 넣어주면 되는데.
주사위 [0,1,2,3,4,5] 를 예로 들어 주입을 해봤습니다.
0의 반대편은 5
1의 반대편은 4
2의 반대편은 3
보여질 면은 3개이기 떄문에 최솟값 0,1,2를 채택하여 넣고 n1,n2,n3에 적합한 값을 넣으면 됩니다.
n = int(input())
s = list(map(int,input().split()))
nums = []
result = 0
if n == 1:
print(sum(s)-max(s))
else:
nums.append(min(s[0], s[5]))
nums.append(min(s[1], s[4]))
nums.append(min(s[2], s[3]))
nums.sort()
n3 = 4
n2 = (n-2)*4 + (n-1)*4
n1 = (n-2)*(n-2) + (n-1)*(n-2)*4
result = n1 * nums[0] + n2 * (nums[0]+nums[1]) + n3 * sum(nums)
print(result)
진짜 어질어질한 문제였네요