문제 링크
- http://icpc.me/2598
문제 출처
- 2004 KOI 초등부 3번
풀이
브루트포스를 열심히 하는 문제입니다.
(1) 기둥의 상태를 잘 표현하는 것, (2) 회전했을 때 동일한 기둥인지 판별하는 것, (3) 정육면체의 상태를 잘 표현하는 것, 3가지를 어떻게 효율적으로 구현할지 고민해보는 것이 좋습니다.
색이 4가지 종류 밖에 없기 때문에 각 색깔은 2비트로 표현할 수 있습니다. 옆면에 등장하는 16개의 면과 윗면까지 총 17개의 면을 표현해야 하므로 34비트가 필요합니다. 64bit 정수형으로 저장할 수 있습니다.
회전했을 때 동일한 기둥인지 판별하는 것은, 옆면들의 minimum cyclic shift를 저장하면 됩니다. 다시 말해, 4개의 옆면을 회전시켰을 때 사전순으로 가장 앞서는 것만 저장하면 됩니다. (ex. 2031 / 0312 / 3120 / 1203
중 0312
만 저장)
정육면체의 상태를 나타내는 것은 위/앞/오른쪽, 총 3개의 면을 고정하면 됩니다.
위 3가지를 잘 조합하면 문제를 풀 수 있습니다.
전체 코드
1 |
|