원판의 치수와 톱날 두께, 나뭇결 방향, 잘라 낼 부재의 폭·높이·장수를 입력하세요(부재는 최대 8종류. 폭과 높이가 모두 빈 행은 무시합니다). 두께와 원판 단가는 비워 두어도 됩니다.
이 페이지에서 할 수 있는 것
- 원판의 치수(3×6 합판 1820×910 mm·4×8 합판 2440×1220 mm 등을 목록에서 고르거나 직접 입력)와 잘라 낼 부재의 폭·높이·장수(최대 8종류)만 넣으면 사야 할 원판의 장수를 바로 알 수 있습니다
- 톱날 두께(절단 손실, 기본값 3 mm)와 나뭇결 방향(부재를 90도 돌려도 되는지)을 고려합니다. 같은 부재만이라면 ‘가로 × 세로’ 격자 계산(돌린 방향·남는 띠에 돌려서 늘어놓는 안도 비교), 여러 부재는 높이 순으로 선반을 만드는 배치(선반 방식)로 함께 재단합니다
- 원판마다 ‘어디에 무엇을 놓을지’를 색으로 구분한 배치도와 ‘원판 1장째: 상판×2 + 옆판×2, 자투리 0.286 m²’ 같은 배치표를 보여 줍니다. 부재별로 따로따로 원판을 사는 경우의 장수와 비교해 함께 재단하면 몇 장을 아낄 수 있는지도 나옵니다
- 자투리의 면적과 수율(부재의 합계 면적 ÷ 원판의 합계 면적), 면적으로 구한 이론상 최소 장수(하한)를 함께 보여 주고, 배치가 하한과 일치하는지 표시합니다. 원판 단가(선택)를 넣으면 대략적인 비용도 나옵니다
- 공식의 쉬운 해설과 Excel·Google 스프레드시트·Python에 복사해 쓸 수 있는 수식도 이 페이지에 모아 두었습니다
이 계산은 어디에 쓰일까요?
예를 들어 상판 900×450 mm×2장·옆판 700×400 mm×4장·선반 600×350 mm×3장인 책장을 3×6 합판(1820×910 mm)으로 만들 때, 부재별로 따로 사면 원판 3장이지만 높이 순으로 선반을 만들어 채우는 방식으로 함께 재단하면 2장이면 됩니다(1장째: 상판×2 + 옆판×2, 2장째: 옆판×2 + 선반×3).
합판은 부피가 커서 차에 싣기 어렵고 남기면 둘 곳이 곤란하므로, 장보기 전에 장수와 배치를 정해 두면 낭비가 없습니다. 나뭇결을 맞추고 싶은 무늬목 합판은 ‘맞춤’으로 계산하고, 구조용 합판이나 칠로 덮는 판은 ‘상관없음’으로 장수를 줄입니다.
목재소나 건재상, 대형 마트의 재단 서비스(패널 쏘)는 ‘원판 끝에서 끝까지 곧게’만 자를 수 있고, 재단비는 1커트당 또는 1장당으로 받는 곳이 많습니다. 이 페이지의 배치도는 그 자르는 방법(길로틴 컷)에 맞췄으므로, 그림대로 ‘먼저 위에서 450 mm 위치에서 가로로 일직선으로 자르고, 그 위의 판을 왼쪽에서 900 mm 위치에서 세로로 자르고…’라고 지시하면 매장에서 헤매지 않습니다(톱날 두께는 날이 깎는 만큼이므로 자를 위치는 부재의 치수 그대로입니다).
자르는 선의 개수를 세어 두면 재단비를 짐작할 수 있습니다. 톱날 두께는 매장 패널 쏘의 날 두께(3 mm 안팎이 많지만 매장에서 확인할 수 있습니다)에 맞춰 바꾸세요. 또 매장에 따라 폭이 좁은 재단(몇 cm 이하)이나 사선·중간 멈춤 재단은 받아 주지 않으므로, 가는 부재가 많을 때는 미리 확인해 두면 안심입니다.
3×6 합판을 4등분한 455×455 mm 부재는 톱날 두께가 없다면 8장 나올 것처럼 보이지만, 톱날 두께 3 mm에서는 가로 \(\lfloor 1823 \div 458 \rfloor = 3\)장·세로 \(\lfloor 913 \div 458 \rfloor = 1\)장으로 3장밖에 나오지 않습니다. 450×450 mm로 바꾸기만 해도 가로 4장 × 세로 2장 = 8장이 나옵니다.
이처럼 설계 단계에서 부재 치수를 조금 바꾸면 원판 장수가 크게 달라지는 경우가 있습니다. 선반 깊이를 5 mm 줄이거나 상판을 2장으로 나누는 등의 조정을 장보기 전에 이 계산기로 시험해 두면 재료비를 아낄 수 있습니다.
가구 공장이나 창호점, 간판 업체(알루미늄 복합판·아크릴판), 판금 공장(철판)에서는 재료비가 원가의 큰 비율을 차지하므로 원판에서 부재를 어떻게 얻을지(네스팅)와 수율을 일상적으로 관리합니다. 이 페이지의 ‘수율’은 부재의 합계 면적을 원판의 합계 면적으로 나눈 값으로, 실무에서도 같은 정의입니다.
실제 공장에서는 수백 종류의 부재를 배치하므로 전용 재단 소프트웨어(네스팅 소프트웨어)를 씁니다. 선반 방식은 2차원 직사각형 패킹의 교과서적인 휴리스틱으로, 그런 소프트웨어의 생각의 바탕이 되는 방법 중 하나입니다.
‘정해진 규격의 판에서 직사각형을 잘라 내는’ 것은 합판과 같은 공식으로 계산할 수 있습니다. 아크릴판이나 PVC판, 석고보드(900×1800·900×2400 mm), 무늬목 패널, MDF(4×8 규격) 등입니다. 유리처럼 칼로 금을 긋고 쪼개는 재료는 톱날 두께를 0으로 하고(타일도 수동 커터로 쪼갠다면 0, 습식 커터로 자른다면 날 두께만큼), 나뭇결이 없는 재료는 ‘상관없음’으로 하면 장수가 줄어듭니다.
다만 유리나 얇은 아크릴은 깨지기 쉽고, 무늬가 있는 판은 무늬 방향에 제약이 있으므로 재료의 성질에 맞게 톱날 두께와 회전 설정을 바꾸세요.
공식과 그림
용어·기호 해설
기호
| \(W\) | 더블유 | 원판의 폭(mm)입니다. 사 오는 합판 1장의 가로 길이입니다. Width(폭)의 첫 글자이며, 부재의 폭 \(w\)와 구별하려고 대문자로 씁니다. |
| \(H\) | 에이치 | 원판의 높이(mm)입니다. 합판 1장의 세로 길이입니다. Height(높이)의 첫 글자이며, 부재의 높이 \(h\)와 구별하려고 대문자로 씁니다. 나뭇결을 ‘상관없음’으로 하면 폭과 높이를 바꿔도 장수는 바뀌지 않습니다(‘맞춤’일 때는 부재의 방향과 맞춰야 합니다). |
| \(w\)·\(w_i\) | 더블유·더블유 아이 | 부재(잘라 낼 판)의 폭(mm)입니다. \(w_i\)의 \(i\)는 ‘\(i\)번째 종류의 부재’라는 번호입니다(상판·옆판·선반처럼 종류가 여럿이기 때문입니다). |
| \(h\)·\(h_i\) | 에이치·에이치 아이 | 부재의 높이(mm)입니다. 선반 방식의 공식에서는 \(h_1,\ h_2,\ \ldots\)를 ‘각 선반의 높이’라는 뜻으로도 씁니다(선반의 높이 = 그 선반에서 가장 높은 부재의 높이). |
| \(k\) | 케이 | 톱날 두께(mm)입니다. 자를 때마다 이만큼 판이 깎여 없어집니다. kerf(영어로 ‘톱의 자른 자리’)의 첫 글자입니다. |
| \(c\) | 시 | 같은 부재만 늘어놓았을 때 원판의 폭 방향으로 가로로 늘어서는 장수입니다. \(\lfloor (W + k) \div (w + k) \rfloor\)로 구합니다. column(열)의 첫 글자입니다. |
| \(r\) | 알 | 같은 부재만 늘어놓았을 때 원판의 높이 방향으로 세로로 늘어서는 장수입니다. \(\lfloor (H + k) \div (h + k) \rfloor\)로 구합니다. row(행)의 첫 글자입니다. |
| \(m\)·\(m_i\) | 엠·엠 아이 | 같은 부재만 늘어놓았을 때 원판 1장에서 나오는 장수입니다. 가로로 늘어서는 장수 \(c\)와 세로로 늘어서는 장수 \(r\)을 곱한 \(m = c \times r\)로 구합니다. |
| \(q_i\) | 큐 아이 | 부재 \(i\)의 필요 장수입니다. quantity(수량)의 첫 글자입니다. |
| \(B_i\) | 비 아이 | 부재 \(i\)만 재단하는 데 필요한 원판 장수입니다. \(\lceil q_i \div m_i \rceil\)로 구합니다. |
| \(B_{\text{별}}\) | 비 별 | 부재별로 따로 원판에서 재단하는(따로 사는) 경우의 합계 장수입니다. 각 부재의 \(B_i\)를 모두 더한 값입니다. |
| \(B\) | 비 | 함께 재단(선반 방식 등의 배치)할 때 필요한 원판 장수입니다. 이 페이지의 주인공인 값입니다. |
| \(n\) | 엔 | 선반 하나에 가로로 늘어서는 부재의 장수입니다. 부재 사이에 톱날 두께가 \(n - 1\)번분 들어가므로 선반에 늘어서는 조건의 식에 씁니다. number(수)의 첫 글자입니다. |
| \(s\) | 에스 | 원판 1장에 쌓는 선반의 단 수입니다. 선반 사이에 톱날 두께가 \(s - 1\)번분 들어가므로 선반을 쌓을 수 있는 조건의 식에 씁니다. shelf(선반)의 첫 글자입니다. |
| \(A_{\text{자투리}}\) | 에이 자투리 | 자투리의 면적(mm²·m²)입니다. 산 원판의 합계 면적에서 부재의 합계 면적을 뺀 값으로, 톱날 두께로 톱밥이 되는 만큼도 포함합니다. \(A\)는 Area(넓이)의 첫 글자입니다. |
| \(Y\) | 와이 | 수율(%)입니다. 부재의 합계 면적을 원판의 합계 면적으로 나눠 100을 곱한 값입니다. Yield(수확량·수율)의 첫 글자입니다. |
| \(B_{\min}\) | 비 민 | 면적으로 구한 이론상 최소 장수(하한)입니다. \(\lceil \sum_i q_i (w_i + k)(h_i + k) \div ((W + k)(H + k)) \rceil\)로 구하며, 함께 재단한 장수 \(B\)가 이와 일치하면 최적입니다. min은 minimum(최소)의 줄임말입니다. |
| \(\Delta\) | 델타 | 아낄 수 있는 장수입니다. \(B_{\text{별}} - B\)입니다. 그리스 문자 델타는 ‘차’를 나타낼 때 자주 씁니다(difference의 첫 글자 d에 해당하는 문자). |
| \(u\) | 유 | 원판 1장당 단가(원)입니다. unit price(단가)의 첫 글자입니다. |
| \(T\) | 티 | 대략적인 비용(원)입니다. total(합계)의 첫 글자입니다. 원판 본체만이며 재단비·배송비는 포함하지 않습니다. |
| \(\lfloor x \rfloor\) | 바닥 함수 | 소수점 아래를 버려 정수로 만드는 기호입니다(예: \(\lfloor 3.02 \rfloor = 3\), \(\lfloor 2 \rfloor = 2\)). 나오는 장수는 ‘다 들어가지 않는 만큼을 버리므로’ 이 기호를 씁니다. |
| \(\lceil x \rceil\) | 천장 함수 | 소수점 아래를 올려 정수로 만드는 기호입니다(예: \(\lceil 1.56 \rceil = 2\), \(\lceil 2 \rceil = 2\)). 사는 장수는 ‘모자라는 만큼 1장 늘리므로’ 이 기호를 씁니다. |
| \(\sum\) | 시그마 | ‘모두 더한다’는 것을 나타내는 기호입니다. \(\sum_i q_i w_i h_i\)라면 부재 종류 \(i\)마다 \(q_i w_i h_i\)(장수 × 폭 × 높이)를 계산해 모두 더합니다. 그리스 문자 시그마로, Sum(합계)의 첫 글자 S에 해당하는 문자입니다. |
용어
| 원판 | 부재를 잘라 내는 바탕이 되는 큰 판입니다. 합판·MDF·무늬목 판·아크릴판·철판처럼 정해진 규격 치수로 파는 판재를 말합니다. 이 페이지에서는 폭 \(W\) × 높이 \(H\)의 직사각형으로 다룹니다. |
| 재단 계획 | 원판에서 필요한 부재를 어떻게 잘라 낼지 정하는 작업입니다. 이 페이지는 폭과 높이를 모두 생각하는 2차원 재단이며, 각재나 파이프처럼 길이만 생각하는 1차원 재단은 ‘목재 재단 계산기’에서 다룹니다. |
| 톱날 두께 | 톱으로 자를 때 날 두께만큼 판이 깎여 없어지는 길이(절단 손실, 커프)입니다. 원형톱이나 패널 쏘의 날 두께는 1.5~3 mm 정도가 많고, 절단면의 깨짐이나 먹선(자를 위치의 표시)만큼도 생각해 3 mm 안팎으로 어림하는 것이 일반적입니다. 쓰는 날의 두께(날에 새겨진 kerf 값)를 알면 그 값을 넣으세요. 자르는 횟수만큼 쌓이므로 작은 부재를 많이 잘라 낼수록 영향이 커집니다. |
| 나뭇결 | 나무 섬유의 방향에 따른 판 표면의 무늬입니다. 무늬목 합판이나 원목에서는 부재의 나뭇결을 모두 같은 방향으로 맞추지 않으면 보기에 부자연스러우므로 재단 계획에서 부재를 90도 돌릴 수 없는 경우가 있습니다. 이 페이지에서는 ‘나뭇결 방향’으로 회전 여부를 고릅니다. 구조용 합판이나 칠로 덮는 판이라면 ‘상관없음’으로 해도 됩니다. |
| 길로틴 컷 | 원판의 끝에서 끝까지 곧게 잘라 내는 방법입니다. 자른 뒤의 판을 다시 끝에서 끝까지 자르기를 반복해 부재를 얻습니다. 목재소·건재상의 재단에 쓰는 패널 쏘(큰 판용 직선 재단기)는 이 방법만 가능하므로, 이 계산기의 배치도 길로틴 컷으로 자를 수 있는 형태(선반 방식)로 제한했습니다. 중간에 멈추는 자르기(L자 칼집)를 허용하면 더 채울 수 있는 경우도 있지만, 가정의 원형톱으로도 자르기 어려워 쓰지 않았습니다. |
| 선반 방식(FFDH) | 부재를 높이가 높은 순으로 늘어놓고, 원판을 가로지르는 ‘선반’을 위에서부터 차례로 만들어 채워 가는 배치 순서입니다. First Fit Decreasing Height(높이가 큰 순으로, 처음 들어가는 선반에)의 줄임말로, 2차원 직사각형 패킹의 대표적인 휴리스틱입니다. 자르는 선이 끝에서 끝까지 지나가므로 재단 서비스에 그대로 맡길 수 있습니다. 간단한 순서에 비해 결과가 좋지만 항상 최소 장수가 되는 것은 아닙니다. |
| 자투리 | 부재를 잘라 낸 뒤 남는 재료입니다. 원판 끝에 남는 가늘고 긴 판이나 선반 오른쪽에 남는 조각을 말합니다. 자투리가 적을수록 재료 낭비가 적고 수율이 높아집니다. 큰 자투리는 소품의 선반이나 보강재로 돌릴 수 있습니다. |
| 수율 | 재료 중 제품(부재)으로 쓸 수 있었던 비율입니다. 이 페이지에서는 ‘부재의 합계 면적 ÷ 사는 원판의 합계 면적’이며, 자투리와 톱날 두께가 적을수록 100%에 가까워집니다. |
| 하한 | ‘아무리 궁리해도 이보다 작아지지 않는다’는 값입니다. 이 페이지의 이론상 최소 장수는 면적으로 구한 하한이며, 배치 장수가 이와 일치하면 최적임을 알 수 있습니다. 일치하지 않을 때도 2차원 재단 계획에서는 모양의 제약으로 하한까지 줄이지 못하는 경우가 많습니다. |
| 최적해 | 생각할 수 있는 모든 방법 중 가장 좋은 답입니다. 이 페이지에서는 ‘원판 장수가 가장 적은 배치’를 말합니다. 함께 재단한 장수가 하한과 일치하면 최적해이지만, 일치하지 않으면 이 계산기는 조합을 모두 찾지는 않으므로 최적해인지 확인할 수 없습니다. |
| 휴리스틱 | ‘반드시 최적해가 된다는 보장은 없지만, 정해진 순서로 빠르게 좋은 답을 내는 방법’입니다. 재단 계획 같은 조합 문제는 부재가 늘면 생각할 수 있는 놓는 방법이 폭발적으로 늘어 모두 시험할 수 없으므로 실무에서도 휴리스틱을 자주 씁니다. 이 페이지의 선반 방식이나 격자 계산도 그중 하나입니다. |
| 합판 | 얇은 나무판(단판)을 나뭇결이 직교하도록 여러 장 붙인 판입니다. 휘기 어렵고 큰 판을 만들 수 있어 DIY의 선반·상자·바탕재에 널리 쓰입니다. 일반 합판·코어 합판·자작나무 합판·무늬목 합판 등이 있고, 두께는 9·12·15·18 mm(9T·12T·15T·18T) 등이 일반적입니다. |
| MDF | 나무 섬유를 접착제로 굳혀 만든 중밀도 섬유판(Medium Density Fiberboard)입니다. 표면이 매끈해 칠하기 쉽고 가구·수납장에 많이 쓰이며, 한국에서는 4×8(1220×2440 mm) 규격이 흔합니다. 습기에 약하므로 물 쓰는 곳에는 방수 처리된 제품을 고릅니다. |
| 3×6 합판 | 3자 × 6자(910×1820 mm) 규격의 판입니다. 합판·MDF 등의 대표적인 크기로, 일반 승용차에도 비교적 싣기 쉽습니다. 1자 = 약 303 mm이므로 3자 ≒ 910 mm, 6자 ≒ 1820 mm입니다. |
| 4×8 합판 | 4자 × 8자(1220×2440 mm) 규격의 판입니다. 한국의 합판·MDF에서 가장 흔한 크기로, 큰 상판이나 벽 한 면의 판을 이음매 없이 얻고 싶을 때 씁니다. 제품에 따라 치수가 조금 다를 수 있으므로 사는 제품의 치수를 확인해 입력하세요. |
| 자 | 판재 규격에 쓰는 전통적인 길이 단위(척)로, 1자 = 약 30.3 cm입니다. 법정 단위는 아니지만 목재·합판 시장에서는 ‘3×6’, ‘4×8’처럼 자 단위의 이름이 지금도 널리 쓰입니다. |
먼저 알아 두면 좋은 내용
이 페이지의 계산을 ‘뜻을 이해하고’ 쓸 수 있도록 먼저 알아 두면 좋은 내용을 정리했습니다.
| 나눗셈과 나머지(초등학교 3~4학년, 8~10세) |
|
| 어림하기(올림·버림·반올림)(초등학교 5학년, 10~11세) |
|
| 직사각형의 넓이(초등학교 5학년, 10~11세) |
|
| 비율과 백분율(초등학교 6학년, 11~12세) |
|
| 문자를 사용한 식과 부등식(중학교 1~2학년, 12~14세) |
|
Excel로 계산하는 방법
| 원판의 폭(mm) | 1820 |
| 원판의 높이(mm) | 910 |
| 부재의 폭(mm) | 600 |
| 부재의 높이(mm) | 400 |
| 톱날 두께(mm) | 3 |
| 가로로 늘어서는 장수 | =INT((B1+B5)/(B3+B5)) |
| 세로로 늘어서는 장수 | =INT((B2+B5)/(B4+B5)) |
| 원판 1장에서 나오는 장수 | =B6*B7 |
| 부재의 필요 장수 | 8 |
| 원판 1장에서 나오는 장수 | 6 |
| 필요한 원판 장수 | =ROUNDUP(B1/B2,0) |
| 원판 장수 | 2 |
| 원판의 폭(mm) | 1820 |
| 원판의 높이(mm) | 910 |
| 모든 부재 면적의 합계(mm²) | 1920000 |
| 자투리의 면적(mm²) | =B1*B2*B3-B4 |
| 자투리의 면적(m²) | =B5/1000000 |
| 수율(%) | =B4/(B1*B2*B3)*100 |
| 모든 부재의 (폭 + 톱날 두께) × (높이 + 톱날 두께)의 합계(mm²) | 2589931 |
| (원판의 폭 + 톱날 두께) × (원판의 높이 + 톱날 두께)(mm²) | 1664399 |
| 이론상 최소 장수 | =ROUNDUP(B1/B2,0) |
| 따로 사는 경우의 장수 | 3 |
| 함께 재단한 장수 | 2 |
| 원판 단가(원) | 20000 |
| 아낄 수 있는 장수 | =B1-B2 |
| 대략적인 비용(원) | =B3*B2 |
‘INT(값)’은 소수점 아래를 버려 정수로 만드는 함수(공식의 ⌊ ⌋), ‘ROUNDUP(값, 0)’은 올리는 함수(공식의 ⌈ ⌉)입니다.
첫째 표의 B8은 6장(가로 3장 × 세로 2장), 둘째 표의 B3은 2장, 셋째 표의 B6은 1.3924 m², B7은 57.96…%(600×400 mm를 8장, 원판 2장의 예), 넷째 표의 B3은 2장, 다섯째 표는 1장 절약·비용 40,000원이 됩니다.
선반 방식의 배치 자체는 부재를 높이 순으로 다시 늘어놓고 위에서부터 차례로 선반에 맞춰 가는 수작업이 되므로, 표 계산에서는 ‘나오는 장수’, ‘자투리’, ‘하한’의 확인에 쓰고, 배치도는 이 페이지나 아래 Python 코드로 만드는 것이 확실합니다.
Google 스프레드시트로 계산하는 방법
| 원판의 폭(mm) | 1820 |
| 원판의 높이(mm) | 910 |
| 부재의 폭(mm) | 600 |
| 부재의 높이(mm) | 400 |
| 톱날 두께(mm) | 3 |
| 가로로 늘어서는 장수 | =INT((B1+B5)/(B3+B5)) |
| 세로로 늘어서는 장수 | =INT((B2+B5)/(B4+B5)) |
| 원판 1장에서 나오는 장수 | =B6*B7 |
| 부재의 필요 장수 | 8 |
| 원판 1장에서 나오는 장수 | 6 |
| 필요한 원판 장수 | =ROUNDUP(B1/B2,0) |
| 원판 장수 | 2 |
| 원판의 폭(mm) | 1820 |
| 원판의 높이(mm) | 910 |
| 모든 부재 면적의 합계(mm²) | 1920000 |
| 자투리의 면적(mm²) | =B1*B2*B3-B4 |
| 자투리의 면적(m²) | =B5/1000000 |
| 수율(%) | =B4/(B1*B2*B3)*100 |
| 모든 부재의 (폭 + 톱날 두께) × (높이 + 톱날 두께)의 합계(mm²) | 2589931 |
| (원판의 폭 + 톱날 두께) × (원판의 높이 + 톱날 두께)(mm²) | 1664399 |
| 이론상 최소 장수 | =ROUNDUP(B1/B2,0) |
| 따로 사는 경우의 장수 | 3 |
| 함께 재단한 장수 | 2 |
| 원판 단가(원) | 20000 |
| 아낄 수 있는 장수 | =B1-B2 |
| 대략적인 비용(원) | =B3*B2 |
Python으로 계산하는 방법
import math
sheet_w, sheet_h = 1820, 910 # 원판의 폭·높이(mm). 3×6 합판
kerf = 3 # 톱날 두께(mm)
rotate = True # 나뭇결이 상관없으면(부재를 90도 돌려도 되면) True
unit_price = 20000 # 원판 1장의 단가(원)
# 잘라 낼 부재: (이름, 폭 mm, 높이 mm, 장수)
parts = [("상판", 900, 450, 2), ("옆판", 700, 400, 4), ("선반", 600, 350, 3)]
# 부재별로 따로 사는 경우의 장수(가로×세로 격자. 돌려도 되면 방향을 바꾼 쪽도 시험)
def per_sheet(w, h):
return ((sheet_w + kerf) // (w + kerf)) * ((sheet_h + kerf) // (h + kerf)) # 버림(공식의 ⌊ ⌋)
sheets_separate = 0
for name, w, h, qty in parts:
m = max(per_sheet(w, h), per_sheet(h, w) if rotate else 0)
sheets_separate += math.ceil(qty / m) # 올림(공식의 ⌈ ⌉)
# 함께 재단: 선반 방식(높이가 높은 순으로, 처음 들어가는 선반에. 돌려도 되면 긴 변을 가로로 늘어놓음)
pieces = []
for name, w, h, qty in parts:
pw, ph = (max(w, h), min(w, h)) if rotate else (w, h)
pieces += [(name, pw, ph)] * qty
pieces.sort(key=lambda p: (-p[2], -p[1]))
sheets = [] # 원판마다 {"y": 다음 선반의 위치, "shelves": [{"y", "h", "x", "parts"}]}
for name, pw, ph in pieces:
for sheet in sheets:
shelf = next((s for s in sheet["shelves"] if ph <= s["h"] and pw <= sheet_w - s["x"]), None)
if shelf is None and ph <= sheet_h - sheet["y"]:
shelf = {"y": sheet["y"], "h": ph, "x": 0, "parts": []}
sheet["shelves"].append(shelf)
sheet["y"] += ph + kerf
if shelf is not None:
shelf["parts"].append((name, shelf["x"], shelf["y"], pw, ph))
shelf["x"] += pw + kerf
break
else:
sheets.append({"y": ph + kerf, "shelves": [{"y": 0, "h": ph, "x": pw + kerf, "parts": [(name, 0, 0, pw, ph)]}]})
# 자투리·수율·면적의 하한
parts_area = sum(qty * w * h for name, w, h, qty in parts)
total_area = len(sheets) * sheet_w * sheet_h
lower_bound = math.ceil(sum(qty * (w + kerf) * (h + kerf) for name, w, h, qty in parts) / ((sheet_w + kerf) * (sheet_h + kerf)))
print(f"부재별로 따로 사는 경우: {sheets_separate}장")
print(f"함께 재단(선반 방식): {len(sheets)}장(면적의 하한 {lower_bound}장)")
for i, sheet in enumerate(sheets, 1):
for shelf in sheet["shelves"]:
print(f" 원판{i} 선반(y={shelf['y']}): " + ", ".join(f"{n}@x={x} {pw}x{ph}" for n, x, y, pw, ph in shelf["parts"]))
print(f"자투리 면적: {(total_area - parts_area) / 1e6:.3f} m² 수율: {parts_area / total_area * 100:.1f}%")
print(f"대략적인 비용: {unit_price * len(sheets)}원")
LaTeX 등 수식 언어로 쓰는 법(복사 가능)
c = ⌊(W + k) ÷ (w + k)⌋, r = ⌊(H + k) ÷ (h + k)⌋, m = c × r
c = \left\lfloor \frac{W + k}{w + k} \right\rfloor,\quad r = \left\lfloor \frac{H + k}{h + k} \right\rfloor,\quad m = c \times r
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>c</mi>
<mo>=</mo>
<mo>⌊</mo>
<mfrac>
<mrow><mi>W</mi><mo>+</mo><mi>k</mi></mrow>
<mrow><mi>w</mi><mo>+</mo><mi>k</mi></mrow>
</mfrac>
<mo>⌋</mo>
<mo>,</mo>
<mi>r</mi>
<mo>=</mo>
<mo>⌊</mo>
<mfrac>
<mrow><mi>H</mi><mo>+</mo><mi>k</mi></mrow>
<mrow><mi>h</mi><mo>+</mo><mi>k</mi></mrow>
</mfrac>
<mo>⌋</mo>
<mo>,</mo>
<mi>m</mi>
<mo>=</mo>
<mi>c</mi>
<mo>×</mo>
<mi>r</mi>
</mrow>
</math>
c = |__ (W + k) / (w + k) __|, r = |__ (H + k) / (h + k) __|, m = c * r
c = Floor[(W + k)/(w + k)]; r = Floor[(H + k)/(h + k)]; m = c*r
c := floor((W + k)/(w + k)); r := floor((H + k)/(h + k)); m := c*r;
c = floor((W + k)/(w + k)); r = floor((H + k)/(h + k)); m = c*r;
c = ⌊(W + k)/(w + k)⌋, r = ⌊(H + k)/(h + k)⌋, m = c × r
Bᵢ = ⌈qᵢ ÷ mᵢ⌉, B별 = B₁ + B₂ + …
B_i = \left\lceil \frac{q_i}{m_i} \right\rceil,\quad B_{\text{별}} = \sum_i B_i
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub><mi>B</mi><mi>i</mi></msub>
<mo>=</mo>
<mo>⌈</mo>
<mfrac><msub><mi>q</mi><mi>i</mi></msub><msub><mi>m</mi><mi>i</mi></msub></mfrac>
<mo>⌉</mo>
<mo>,</mo>
<msub><mi>B</mi><mtext>별</mtext></msub>
<mo>=</mo>
<munder><mo>∑</mo><mi>i</mi></munder>
<msub><mi>B</mi><mi>i</mi></msub>
</mrow>
</math>
B_i = |~ q_i / m_i ~|, B_"별" = sum_i B_i
Total[Ceiling[q/m]]
B := add(ceil(q[i]/m[i]), i = 1 .. n);
B = sum(ceil(q ./ m));
B_i = ⌈q_i/m_i⌉, B_별 = ∑_i B_i
w₁ + w₂ + … + wₙ + (n − 1)k ≤ W, h₁ + h₂ + … + hₛ + (s − 1)k ≤ H
\sum_{j=1}^{n} w_j + (n - 1)k \leq W,\quad \sum_{t=1}^{s} h_t + (s - 1)k \leq H
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<munderover><mo>∑</mo><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover>
<msub><mi>w</mi><mi>j</mi></msub>
<mo>+</mo>
<mo>(</mo><mi>n</mi><mo>−</mo><mn>1</mn><mo>)</mo><mi>k</mi>
<mo>≤</mo>
<mi>W</mi>
<mo>,</mo>
<munderover><mo>∑</mo><mrow><mi>t</mi><mo>=</mo><mn>1</mn></mrow><mi>s</mi></munderover>
<msub><mi>h</mi><mi>t</mi></msub>
<mo>+</mo>
<mo>(</mo><mi>s</mi><mo>−</mo><mn>1</mn><mo>)</mo><mi>k</mi>
<mo>≤</mo>
<mi>H</mi>
</mrow>
</math>
sum_(j=1)^n w_j + (n - 1) k <= W, sum_(t=1)^s h_t + (s - 1) k <= H
Total[w] + (Length[w] - 1)*k <= W && Total[h] + (Length[h] - 1)*k <= H
add(w[j], j = 1 .. n) + (n - 1)*k <= W; add(h[t], t = 1 .. s) + (s - 1)*k <= H;
sum(w) + (numel(w) - 1)*k <= W && sum(h) + (numel(h) - 1)*k <= H
∑_(j=1)^n w_j + (n − 1)k ≤ W, ∑_(t=1)^s h_t + (s − 1)k ≤ H
A자투리 = B × W × H − Σ qᵢ wᵢ hᵢ, Y = Σ qᵢ wᵢ hᵢ ÷ (B × W × H) × 100
A_{\text{자투리}} = B\,W\,H - \sum_i q_i w_i h_i,\quad Y = \frac{\sum_i q_i w_i h_i}{B\,W\,H} \times 100
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub><mi>A</mi><mtext>자투리</mtext></msub>
<mo>=</mo>
<mi>B</mi><mo>⁢</mo><mi>W</mi><mo>⁢</mo><mi>H</mi>
<mo>−</mo>
<munder><mo>∑</mo><mi>i</mi></munder>
<msub><mi>q</mi><mi>i</mi></msub><msub><mi>w</mi><mi>i</mi></msub><msub><mi>h</mi><mi>i</mi></msub>
<mo>,</mo>
<mi>Y</mi>
<mo>=</mo>
<mfrac>
<mrow><munder><mo>∑</mo><mi>i</mi></munder><msub><mi>q</mi><mi>i</mi></msub><msub><mi>w</mi><mi>i</mi></msub><msub><mi>h</mi><mi>i</mi></msub></mrow>
<mrow><mi>B</mi><mo>⁢</mo><mi>W</mi><mo>⁢</mo><mi>H</mi></mrow>
</mfrac>
<mo>×</mo>
<mn>100</mn>
</mrow>
</math>
A_"자투리" = B W H - sum_i q_i w_i h_i, Y = (sum_i q_i w_i h_i) / (B W H) * 100
{B*W*H - Total[q*w*h], Total[q*w*h]/(B*W*H)*100}
Awaste := B*W*H - add(q[i]*w[i]*h[i], i = 1 .. n); Y := add(q[i]*w[i]*h[i], i = 1 .. n)/(B*W*H)*100;
Awaste = B*W*H - sum(q .* w .* h); Y = sum(q .* w .* h)/(B*W*H)*100;
A_자투리 = BWH − ∑_i q_i w_i h_i, Y = (∑_i q_i w_i h_i)/(BWH) × 100
Bmin = ⌈Σ qᵢ (wᵢ + k)(hᵢ + k) ÷ ((W + k)(H + k))⌉
B_{\min} = \left\lceil \frac{\sum_i q_i (w_i + k)(h_i + k)}{(W + k)(H + k)} \right\rceil
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub><mi>B</mi><mi>min</mi></msub>
<mo>=</mo>
<mo>⌈</mo>
<mfrac>
<mrow><munder><mo>∑</mo><mi>i</mi></munder><msub><mi>q</mi><mi>i</mi></msub><mo>(</mo><msub><mi>w</mi><mi>i</mi></msub><mo>+</mo><mi>k</mi><mo>)</mo><mo>(</mo><msub><mi>h</mi><mi>i</mi></msub><mo>+</mo><mi>k</mi><mo>)</mo></mrow>
<mrow><mo>(</mo><mi>W</mi><mo>+</mo><mi>k</mi><mo>)</mo><mo>(</mo><mi>H</mi><mo>+</mo><mi>k</mi><mo>)</mo></mrow>
</mfrac>
<mo>⌉</mo>
</mrow>
</math>
B_min = |~ (sum_i q_i (w_i + k)(h_i + k)) / ((W + k)(H + k)) ~|
Ceiling[Total[q*(w + k)*(h + k)]/((W + k)*(H + k))]
Bmin := ceil(add(q[i]*(w[i] + k)*(h[i] + k), i = 1 .. n)/((W + k)*(H + k)));
Bmin = ceil(sum(q .* (w + k) .* (h + k))/((W + k)*(H + k)));
B_min = ⌈(∑_i q_i (w_i + k)(h_i + k))/((W + k)(H + k))⌉
Δ = B별 − B, T = u × B
\Delta = B_{\text{별}} - B,\quad T = u \times B
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>Δ</mi>
<mo>=</mo>
<msub><mi>B</mi><mtext>별</mtext></msub>
<mo>−</mo>
<mi>B</mi>
<mo>,</mo>
<mi>T</mi>
<mo>=</mo>
<mi>u</mi>
<mo>×</mo>
<mi>B</mi>
</mrow>
</math>
Delta = B_"별" - B, T = u * B
{bSep - b, u*b}
Delta := Bsep - B; T := u*B;
Delta = Bsep - B; T = u*B;
Δ = B_별 − B, T = u × B
ChatGPT 에게 물어서 계산하는 방법
당신은 합판 재단 계획의 계산 도우미입니다. 다음 계산을 반드시 Python 코드를 실제로 실행해서 하고, 실행 결과의 수치만을 근거로 답하세요(암산이나 추측으로 답하지 마세요). 원판 1820×910 mm 합판(3×6)에서 톱날 두께 3 mm, 부재는 90도 돌려도 되는 조건으로 상판 900×450 mm×2장·옆판 700×400 mm×4장·선반 600×350 mm×3장을 잘라 냅니다. 다음 값을 각각 구하세요. 1. 부재별로 같은 부재만 늘어놓았을 때 원판 1장에서 나오는 장수(⌊(1820+3)÷(폭+3)⌋ × ⌊(910+3)÷(높이+3)⌋. 폭과 높이를 바꾼 방향도 계산해 많은 쪽) 2. 부재별로 따로 원판에서 재단하는 경우의 원판 합계 장수(필요 장수 ÷ 나오는 장수를 올림한 값의 합계) 3. 부재를 높이가 높은 순으로 늘어놓고, 원판을 가로지르는 선반을 위에서부터 차례로 만들어 채우는 선반 방식(First Fit Decreasing Height. 선반 안에서는 폭 + 톱날 두께씩 오른쪽으로, 선반은 높이 + 톱날 두께씩 아래로 진행)으로 배치했을 때의 원판 장수와 원판별 부재의 위치 4. 자투리 면적(원판의 합계 면적 − 부재의 합계 면적)과 수율(%) 5. 면적으로 구한 이론상 최소 장수(모든 부재의 (폭+3) × (높이+3)의 합계를 (1820+3) × (910+3)으로 나눈 값의 올림) 계산에 쓴 코드와 실행 결과의 수치를 보여 주세요.
사용법
-
1숫자 입력계산하고 싶은 숫자를 입력란에 입력합니다
-
2계산‘계산’ 버튼을 누릅니다
-
3결과 확인계산 결과가 바로 표시됩니다. 계산의 원리와 공식 해설도 같은 페이지에서 확인할 수 있습니다
DataChef의 특징
전문 지식 없이도 직관적이고 간단하게 사용
개인정보를 등록하지 않고도 이용할 수 있습니다
"다운로드"를 누르면 파일이 자동으로 삭제됩니다
출처 표기 불필요
상업적 이용 허가 연락도 필요 없습니다