늒네 기록

[BOJ-JS] 1041번 - 주사위 본문

알골 공부 기록/BOJ

[BOJ-JS] 1041번 - 주사위

jaeha lee 2024. 4. 24. 23:25

1041번: 주사위 (acmicpc.net)

 

1041번: 주사위

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

www.acmicpc.net

주사위의 특징을 알아야 풀 수 있는 문제다!

 

일반적인 케이스부터 알아보면,

  • 한 면만 드러나는 주사위는 윗면의 (n-2)*(n-2)개, 그리고 옆면의 (n-2)*(n-1)*4개가 있다. 윗면은 모서리들을 다 빼야 하지만, 옆면은 맨 아랫줄이 바닥에 닿아있어서 한 면만 보이는 것을 감안해야 한다.
  • 두 면이 드러나는 주사위는 윗면 모서리의 4*(n-2)개, 그리고 옆면 모서리의 4*(n-1)개가 있다.
  • 세 면이 드러나는 주사위는 윗면 꼭지점의 4개가 있다.

그렇다면 이제 위의 세 케이스에 대해서 면이 하나, 둘, 셋이 드러날때 합이 최소가 되는 케이스를 구하면 되는데, 이는 아래 식을 보면 이해할 수 있을 거라고 본다. 세 면이 드러나는 경우는 총 8가지가 있고, 두 면이 드러나는 경우는 총 12가지가 있다. 좀 더 자세히 설명하면,

  • 세 면의 경우, 여덟 꼭지점이 있는데 각 꼭지점마다 닿아있는 면을 생각하면 된다. 윗 꼭지점 4개, 아랫 꼭지점 4개라고 생각하면, 윗면이 무조건 포함된 경우가 4개, 아랫면이 무조건 포함된 경우가 4개 있다고 보면 되고, 옆면 4개 중 서로 이웃한 면을 고르는 방법이 4개가 있으므로 이 경우들에 각각 윗면과 아랫면을 더해서 만든다고 생각하면 된다.
  • 두 면의 경우, 윗면이 포함된 경우 4개(이 경우 옆면은 하나만 포함), 아랫면이 포함된 경우 4개(이 경우도 마찬가지로 옆면은 하나만 포함), 이웃한 옆면으로 이루어진 경우 4개가 있다.

 

그리고 이때 주의해야 하는 경우가 하나 있는데, n이 1일때는 한 면만 바닥을 보고 나머지 면이 모두 노출된다!

 

위의 경우들을 신경써서 코드를 짜면 아래와 같다.

[n,z]=(0+require('fs').readFileSync(0)).split`
`
x=z.split` `.map(i=>+i);[a,b,c,d,e,f]=x
g=Math.min
p=g(...x)
q=g(a+b,a+c,a+d,a+e,f+b,f+c,f+d,f+e,b+c,c+e,e+d,d+b)
r=g(a+b+c,a+c+e,a+e+d,a+d+b,f+b+c,f+c+e,f+e+d,f+d+b)
console.log(n-1?4*r+(8*n-12)*q+(5*n*n-16*n+12)*p:a+b+c+d+e+f-Math.max(...x))
반응형
Comments