[BOJ][๐ก4][๋ฐฑ์ค#02116] ์ฃผ์ฌ์ ์๊ธฐ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์ฒ์๋ ์ฌ๋ฌ ์ข ๋ฅ์ ์ฃผ์ฌ์๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋์ด๋ฅผ ํ๊ณ ์๋ค. ์ฃผ์ฌ์์ ๋ชจ์์ ๋ชจ๋ ํฌ๊ธฐ๊ฐ ๊ฐ์ ์ ์ก๋ฉด์ฒด์ด๋ฉฐ ๊ฐ ๋ฉด์๋ 1๋ถํฐ 6๊น์ง์ ์ซ์๊ฐ ํ๋์ฉ ์ ํ์๋ค. ๊ทธ๋ฌ๋ ๋ณดํต ์ฃผ์ฌ์์ฒ๋ผ ๋ง์ฃผ ๋ณด๋ ๋ฉด์ ์ ํ์ง ์ซ์์ ํฉ์ด ๋ฐ๋์ 7์ด ๋๋ ๊ฒ์ ์๋๋ค. ์ฃผ์ฌ์ ์๊ธฐ ๋์ด๋ ์๋์์๋ถํฐ 1๋ฒ ์ฃผ์ฌ์, 2๋ฒ ์ฃผ์ฌ์, 3๋ฒ ์ฃผ์ฌ์, โฆ ์ ์์๋ก ์๋ ๊ฒ์ด๋ค. ์์ ๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ์ง์ผ์ผ ํ๋ค: ์๋ก ๋ถ์ด ์๋ ๋ ๊ฐ์ ์ฃผ์ฌ์์์ ์๋์ ์๋ ์ฃผ์ฌ์์ ์๋ฉด์ ์ ํ์๋ ์ซ์๋ ์์ ์๋ ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ ์ ํ์๋ ์ซ์์ ๊ฐ์์ผ ํ๋ค. ๋ค์ ๋งํด์, 1๋ฒ ์ฃผ์ฌ์ ์๋ฉด์ ์ซ์๋ 2๋ฒ ์ฃผ์ฌ์ ์๋ซ๋ฉด์ ์ซ์์ ๊ฐ๊ณ , 2๋ฒ ์ฃผ์ฌ์ ์๋ฉด์ ์ซ์๋ 3๋ฒ ์ฃผ์ฌ์ ์๋ซ๋ฉด์ ์ซ์์ ๊ฐ์์ผ ํ๋ค. ๋จ, 1๋ฒ ์ฃผ์ฌ์๋ ๋ง์๋๋ก ๋์ ์ ์๋ค. ์ด๋ ๊ฒ ์์ ๋์ผ๋ฉด ๊ธด ์ฌ๊ฐ ๊ธฐ๋ฅ์ด ๋๋ค. ์ด ์ฌ๊ฐ ๊ธฐ๋ฅ์๋ 4๊ฐ์ ๊ธด ์๋ฉด์ด ์๋ค. ์ด 4๊ฐ์ ์๋ฉด ์ค์์ ์ด๋ ํ ๋ฉด์ ์ซ์์ ํฉ์ด ์ต๋๊ฐ ๋๋๋ก ์ฃผ์ฌ์๋ฅผ ์๊ณ ์ ํ๋ค. ์ด๋ ๊ฒ ํ๊ธฐ ์ํ์ฌ ๊ฐ ์ฃผ์ฌ์๋ฅผ ์ ์๋๋ฅผ ๊ณ ์ ํ ์ฑ ์์ผ๋ก 90๋, 180๋, ๋๋ 270๋ ๋๋ฆด ์ ์๋ค. ํ ์๋ฉด์ ์ซ์์ ํฉ์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์ค์๋ ์ฃผ์ฌ์์ ๊ฐ์๊ฐ ์ ๋ ฅ๋๋ค. ๊ทธ ๋ค์ ์ค๋ถํฐ๋ ํ ์ค์ ํ๋์ฉ ์ฃผ์ฌ์์ ์ข ๋ฅ๊ฐ 1๋ฒ ์ฃผ์ฌ์๋ถํฐ ์ฃผ์ฌ์ ๋ฒํธ ์์๋๋ก ์ ๋ ฅ๋๋ค. ์ฃผ์ฌ์์ ์ข ๋ฅ๋ ๊ฐ ๋ฉด์ ์ ํ์ง ์ซ์๊ฐ ๊ทธ๋ฆผ1์ ์๋ ์ฃผ์ฌ์์ ์ ๊ฐ๋์์ A, B, C, D, E, F ์ ์์๋ก ์ ๋ ฅ๋๋ค. ์ ๋ ฅ๋๋ ์ซ์ ์ฌ์ด์๋ ๋น ์นธ์ด ํ๋์ฉ ์๋ค. ์ฃผ์ฌ์์ ๊ฐ์๋ 10,000๊ฐ ์ดํ์ด๋ฉฐ ์ข ๋ฅ๊ฐ ๊ฐ์ ์ฃผ์ฌ์๋ ์์ ์ ์๋ค.
๊ทธ๋ฆผ 1
์ถ๋ ฅ
์ฒซ์ค์ ํ ์๋ฉด์ ์ซ์์ ํฉ์ด ๊ฐ์ฅ ํฐ ๊ฐ์ ์ถ๋ ฅํ๋ค.
์์
์ ๋ ฅ
5
2 3 1 6 5 4
3 1 2 4 6 5
5 6 4 1 3 2
1 3 6 2 4 5
4 1 6 5 2 3
์ถ๋ ฅ
29
My Sol
import sys
sys.setrecursionlimit(100000)
def foo(depth, floor, ceil, ssum):
if depth==N:
global maxV
maxV = max(maxV, ssum)
return
maxNow = max(set(range(1, 7)) - {floor, ceil})
floor = ceil
ceil = cubes[depth+1][floor]
foo(depth+1, floor, ceil, ssum+maxNow)
N = int(input())
cubes = []
for _ in range(N):
a, b, c, d, e, f = map(int, input().split())
dict1 = {a:f, b:d, c:e, d:b, e:c, f:a}
cubes.append(dict1)
cubes.append(dict1)
maxV = 0
for i in range(1, 7):
foo(0, i, cubes[0][i], 0)
print(maxV)
๋์ ๋๋ฆฌ๋ฅผ ์ด์ฉํด ํด๊ฒฐํ์๋ค. ๋ฆฌ์คํธ์ ๋ฐฐ์ด ํํ๋ก ์ ์ฅํ๊ณ , ์ด ๊ฐ๊ฐ์ ์ฌ๊ท๋ฅผ ์ด์ฉํด ์๋์ ์์ ๋์กฐ๋๋ ๊ฐ์ ๋ถ๋ฌ์ ๋ฃ์ด์ฃผ์๋ค. ์ข ๋ฃ์กฐ๊ฑด๊น์ง ๊ฐ๊ธฐ ์ง์ ์ cubes์ ๋์ ๋๋ฆฌ๋ฅผ ๋์ด์๋ ์ธ๋ฑ์ค๋ฅผ ์ฐธ์กฐํ์ฌ floor, ceil์ ๊ฐ์ ์ง์ด๋ฃ๊ธฐ ๋๋ฌธ์ ๋๋ฏธ ๋ฐ์ดํฐ๋ก dict1์ ํ ๋ฒ ๋ cubes์ ๋ฃ์ด์ฃผ์๋ค. ssum ๊ณ์ฐ์๋ ์ฌ์ฉ๋์ง ์๋ ๋ฐ์ดํฐ์ด๋ฏ๋ก ๋ฌด์์ ๋ฃ์ด๋ ์๊ด์ด ์๋ค. key๋ง 1๋ถํฐ 6๊น์ง๋ง ์์ด์ฃผ๋ฉด ๋๊ฒ ๋ค.
set์ ์ฐจ์งํฉ์ ์ด์ฉํ์๋ค. floor์ ceil์ ์ ์ธํ ๋๋จธ์ง 4๊ฐ ๋ฉด ์ค์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ssum์ ๋ํด์ผํ๋ฏ๋ก set์ ์ฐจ์งํฉ์ด ์ต์ ์ด์๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋ชจ๋ฒ๋ต์
#least sum of contact face
import sys
read=sys.stdin.readline
n=int(read())
dices=[]
idx=(5,3,4,1,2,0)
for _ in range(n):
vals=tuple(map(int,read().split()))
res=[0]*7
for v in vals:
res[v]=vals[idx[vals.index(v)]]
dices.append(res)
mx=0
for x in range(1,7):
sm=0
upperFace=x
for i in range(n):
bottomFace,upperFace=upperFace,dices[i][upperFace]
for j in range(6,0,-1):
if j!=bottomFace and j!=upperFace:
sm+=j
break
mx=max(mx,sm)
print(mx)
๋๊ธ๋จ๊ธฐ๊ธฐ