https://www.acmicpc.net/problem/2116
import sys
input = sys.stdin.readline
n = int(input())
dices = [list(map(int, input().split())) for _ in range(n)]
pair = {0:5, 1:3, 2:4, 4:2, 3:1, 5:0}
def findMax(num):
result = 0
for i in range(n): # n개의 주사위 1층부터 탐색
for j in range(6):
if dices[i][j] == num: # 1층 주사위 바닥 숫자를 알면 윗면 숫자를 알아냄
oppo = dices[i][pair[j]]
if num == 6 or oppo == 6:
if num == 5 or oppo == 5:
result += 4
else:
result += 5
else:
result += 6
num = oppo
break
return result
answer = 0
for i in range(1, 7):
answer = max(answer, findMax(i)) # 1층 주사위 i번이 바닥에 있을 때
print(answer)
- 1층 주사위의 바닥면이 정해지면 주사위를 쌓을 때 아랫면과 윗면이 정해진다.
- 이때 가장 큰 값이 되기 위해선 6을 더하고 6이 없을 땐 5, 5가 없을 땐 4를 더한다. (6이나 5가 윗면이나 아랫면에 포함될 때)
- 전개도를 보면 A-F, B-D, C-E로 아랫면이 정해짐과 동시에 짝이되는 윗면을 구할 수 있다.
- 파이썬 딕셔너리를 이용해 아랫면 번호를 알게되면 윗면을 구할 수 있도록한다.
- findMax함수에서 dices 리스트를 완탐하며 주사위 아랫면 숫자를 마주치면 pair 딕셔너리를 이용해 윗면 수를 구한 뒤
- 윗면, 아랫면에 6이 있으면 5 , 이때 5가 하나라도 포함되면 4를 더해주고 그 외의 경우에는 6을 더해주도록 한다.
- 이때, 값을 더했으면 n번째 층의 윗면이 n+1층의 아랫면이 되므로 숫자를 초기화 해준뒤 k 층 주사위의 max값을 더해주고 for문을 마무리 해준다.
'Algorithm > Problems' 카테고리의 다른 글
99클럽 코테 스터디 27일차 TIL + DP (0) | 2024.11.24 |
---|---|
99클럽 코테 스터디 26일차 TIL + 수학 (0) | 2024.11.23 |
99클럽 코테 스터디 24일차 TIL + 완전탐색 (0) | 2024.11.21 |
99클럽 코테 스터디 23일차 TIL + 완전탐색 (0) | 2024.11.20 |
99클럽 코테 스터디 22일차 TIL + 완전탐색 (0) | 2024.11.19 |