반응형
2116번: 주사위 쌓기
첫줄에는 주사위의 개수가 입력된다. 그 다음 줄부터는 한 줄에 하나씩 주사위의 종류가 1번 주사위부터 주사위 번호 순서대로 입력된다. 주사위의 종류는 각 면에 적혀진 숫자가 그림1에 있는
www.acmicpc.net
풀이
- 주사위가 n개 있고 각 주사위의 윗면과 아랫면이 같도록 맞추어 쌓아 올리고 그때 , 옆면의 수를 모두 더하여 가장 큰 수를 출력하는 문제이다.
- n이 최대 10,000 이고 , 가장 아래 주사위의 윗면을 컨트롤 하는 것으로 위쪽의 모든 주사위들을 어떻게 세울지 정해지므로 계산 횟수가 크지 않을 것이라 생각하고 특별한 알고리즘을 사용하지 않고 구현해보았다.
- 가장 밑의 주사위의 윗면이 1 ~ 6 일때의 경우를 모두 살펴보고 그에 따라 세우는 위쪽의 주사위들이 4개의 옆면에서 max 값을 뽑아 한쪽 면에 쭉 나열해 단계의 max합을 통해 합이 전체의 max가 되도록 하였다.
import sys
n = int(sys.stdin.readline())
stack = []
for _ in range(n):
stack.append(list(map(int , input().split())))
def check(stack , ds):
for i in range(0,6):
if ds == stack[i]:
idx = i
break
#1 6 / 2 4 / 3 5
if idx == 0:
return (max(stack[1],stack[2],stack[3],stack[4]) , stack[5])
elif idx == 5:
return (max(stack[1],stack[2],stack[3],stack[4]) , stack[0])
elif idx == 1:
return (max(stack[0],stack[2],stack[5],stack[4]) , stack[3])
elif idx == 3:
return (max(stack[0],stack[2],stack[5],stack[4]) , stack[1])
elif idx == 2:
return (max(stack[0],stack[1],stack[5],stack[3]), stack[4])
elif idx == 4:
return (max(stack[0],stack[1],stack[5],stack[3]), stack[2])
maxx = 0
for i in range(1,7):
next_ds = i
ans = 0
for t in range(0,n):
summ , next_ds = check(stack[t],next_ds)
ans += summ
if maxx < ans:
maxx = ans
print(maxx)
반응형
'코딩 > 백준' 카테고리의 다른 글
알고리즘 - Python / 백준 - 1074번 : Z (0) | 2021.09.06 |
---|---|
알고리즘 - Python / 백준 - 1780번 : 종이의 개수 (0) | 2021.09.06 |
알고리즘 - Python / 백준 - 1389번 : 케빈 베이컨의 6단계 법칙 (0) | 2021.08.31 |
알고리즘 - Python / 백준 - 18870번 : 좌표 압축 (0) | 2021.08.29 |
알고리즘 - Python / 백준 - 1931번 : 회의실 배정 (0) | 2021.08.25 |