2006년 3월 14일 화요일

정육면체, 직육면체 전개도 갯수 구하기 (rectangular parallelepiped development figure)

초등학교 선생님으로 있는 친구가 이런 문제를 냈다.
정육면체의 전개도는 11개.
그럼 직육면체는 전개도가 몇 개나 될까?

일단, 정육면체의 전개도는 다음과 같다.

*
****
*

*
****
*

*
****
*

*
****
*


*
****
*

*
****
*

**
***
*

*
*
****

**
**
**

*
*
**
*
*

*
*
***
*
-----------------
직육면체는 세 변이 모두 길이가 다르다고 하자.

그리고 좀 더 조건을 강하게 줘야 할 것 같다.
'세 변 중 어느 두 변도 한 변이 다른 변의 2,3,4,5배가 되지 않는 다.'
(이렇게 안하면 변의 길이에 따라서 경우의 수가 다를 것 같아서.)

음, 그럼 후보군은 몇개나 될까?
일단 정육면체의 전개도를 이미 구했으니 그것을 이용해보자.
세 변 중 두 변을 고르는 경우의 수는 3가지.
가로로 놓을 지, 세로로 놓을 지에 따라 그것들이 다시 2가지.
즉, 6가지의 방법으로 11개의 전개도 각각에 직사각형을 assign 할 수 있다.
일단 각 전개도에서 한 면만 assign되면 다른 면들은 그 면에 dependent하게
결정된다. (아랫면, 옆면 등 이웃면의 길이가 fix되므로)

이제 우리는 3 x 2 x 11 = 66가지만 test해보면 된다.
사람이 해볼 수도 있겠으나 너무 귀찮으니 컴퓨터로 해보자.
66가지는 아주 쉽게 generate 할 수 있다.
(Graphic툴로 금방 그릴 수 있다.)

66개지만 서로 모두 비교할 필요는 없고 각자 6가지 중에 서로를 비교하면 된다.

비교도 컴퓨터로 하면 편할 듯.
회전과 flip이 가능한 모든 가짓수를 따져보면
0도 회전, 90도 회전, 180도 회전, 270도 회전 = 4가지
그대로 두기, 좌우 뒤집기, 위아래 뒤집기, 좌우위아래뒤집기 = 4가지
4 x 4 = 16가지.

6가지를 비교하려면 6C2 = 15가지 pair가 나옴.

(15번) x (16가지) x (16가지) x (11Group) = 42240번의 6 x 6 Matrix 비교가 필요하다.

그럼 이제 문제를 정리하고 짜야할 프로그램을 알아보면
1. 전개도 생성 프로그램(전개도가 없다면)
2. 전개도 비교 프로그램(전개도가 주어져 있다면)

일반적으로 확장해보면
정 n면체나 축구공 같은 도형에 대해서도 풀 수 있을 것 같다.
이 경우 자유도가 더 크다.

예를 들자 면이 육각형이라고 하면
0,60,120,180,240,300도의 회전 = 6가지
6개의 축을 이용한 뒤집기 = 6가지
사각형은 16가지였지만 6각형은 36가지다.
비교를 위해 도형을 align하는 방법도 좀 더 고민해야 할 것이다.
--------------------
유사한 문제
. 고등학교 화학 II - 유기화합물 가지 그리기, 광학이성질체, 기하 이성질체
. 단백질 folding
. 재료공학 - 고체 결정구조(Crystal)
. Graph Theory - connectivity, connected component
. 이산수학, 조합수학, 위상수학(?)
--------------------
@ 추천곡 '네모의 꿈' - 푸른하늘

댓글 2개:

  1. 젠장~ 뭐가 이렇게 복잡해ㅠㅠ

    걍 수업 안하고 만다~ㅋㅋ

    답글삭제
  2. 그래, 쉬운 걸로 맞춤식 교육해..

    답글삭제