{"id":11152,"date":"2022-09-06T18:29:28","date_gmt":"2022-09-06T09:29:28","guid":{"rendered":"https:\/\/prodskill.com\/?p=11152"},"modified":"2022-11-15T12:00:11","modified_gmt":"2022-11-15T03:00:11","slug":"job-scheduling-using-1d-bin-packing-algorithm-6","status":"publish","type":"post","link":"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/","title":{"rendered":"Optimization of work distribution using one-dimensional bin packing algorithm_4.Attachment"},"content":{"rendered":"\n<p>\uc774 \uae00\uc758 \uc18c\uc2a4\ucf54\ub4dc\ub294 Bin Packing \ub3c4\uad6c\uc758 \ucc98\uc74c \ubc84\uc804 \uae30\uc900\uc73c\ub85c \uc791\uc131\ub418\uc5b4 \uc788\ub2e4. \uae30\ub2a5\uc774 \uac1c\uc120\ub41c \ucd5c\uc2e0\ubc84\uc804\uc774 \uc788\uc73c\ubbc0\ub85c \ud568\uaed8 \ucc38\uc870\ud558\uae30 \ubc14\ub780\ub2e4.<\/p>\n\n\n\n<p><a href=\"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-7\/\">1\ucc28\uc6d0 Bin Packing \ub3c4\uad6c \ucd5c\uadfc \ubcc0\uacbd \uc0ac\ud56d (2021-03-21 \uae30\uc900)<\/a><\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">&lt;&lt;\ubaa9\ucc28&gt;&gt;<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/#5_%EB%B3%84%EC%B2%A8\" >5. \ubcc4\ucca8<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/#51_%EC%97%91%EC%85%80_VBA_%EA%B8%B0%EB%B0%98_%EB%8F%84%EA%B5%AC_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\" >5.1. \uc5d1\uc140 VBA \uae30\ubc18 \ub3c4\uad6c \uc18c\uc2a4 \ucf54\ub4dc<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/#511_Run_sheet_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\" >5.1.1. Run sheet \uc18c\uc2a4 \ucf54\ub4dc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/#512_modFactory_%EB%AA%A8%EB%93%88_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\" >5.1.2. modFactory \ubaa8\ub4c8 \uc18c\uc2a4 \ucf54\ub4dc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/#513_modControl_%EB%AA%A8%EB%93%88_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\" >5.1.3. modControl \ubaa8\ub4c8 \uc18c\uc2a4 \ucf54\ub4dc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/#514_modUtil_%EB%AA%A8%EB%93%88_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\" >5.1.4. modUtil \ubaa8\ub4c8 \uc18c\uc2a4 \ucf54\ub4dc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/#515_CPacker_%ED%81%B4%EB%9E%98%EC%8A%A4_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\" >5.1.5. CPacker \ud074\ub798\uc2a4 \uc18c\uc2a4 \ucf54\ub4dc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/#516_CBin_%ED%81%B4%EB%9E%98%EC%8A%A4_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\" >5.1.6. CBin \ud074\ub798\uc2a4 \uc18c\uc2a4 \ucf54\ub4dc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/#517_CBinItemCollection_%ED%81%B4%EB%9E%98%EC%8A%A4_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\" >5.1.7. CBinItemCollection \ud074\ub798\uc2a4 \uc18c\uc2a4 \ucf54\ub4dc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/#518_CBinItem_%ED%81%B4%EB%9E%98%EC%8A%A4_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\" >5.1.8. CBinItem \ud074\ub798\uc2a4 \uc18c\uc2a4 \ucf54\ub4dc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/#519_CTimer_%ED%81%B4%EB%9E%98%EC%8A%A4_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\" >5.1.9. CTimer \ud074\ub798\uc2a4 \uc18c\uc2a4 \ucf54\ub4dc<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\" id=\"5._\ubcc4\ucca8\"><span class=\"ez-toc-section\" id=\"5_%EB%B3%84%EC%B2%A8\"><\/span>5. \ubcc4\ucca8<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"5.1._\uc5d1\uc140_VBA_\uae30\ubc18_\ub3c4\uad6c_\uc18c\uc2a4_\ucf54\ub4dc\"><span class=\"ez-toc-section\" id=\"51_%EC%97%91%EC%85%80_VBA_%EA%B8%B0%EB%B0%98_%EB%8F%84%EA%B5%AC_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\"><\/span>5.1. \uc5d1\uc140 VBA \uae30\ubc18 \ub3c4\uad6c \uc18c\uc2a4 \ucf54\ub4dc<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>\uc5d1\uc140 VBA\ub85c \uad6c\ud604\ud55c Bin Packing\uc740 \uc678\ubd80 library \ub610\ub294 package \uc5c6\uc774 \uc21c\uc218\ud558\uac8c VBA \ucf54\ub4dc\ub85c\ub9cc \uad6c\ud604\ud574\uc11c, \uc18c\uc2a4\ucf54\ub4dc\uc758 \uc591\uc774 \uae34 \ud3b8\uc774\ub2e4. \uc54c\uace0\ub9ac\uc998\uc758 \ub300\ubd80\ubd84\uc740 CPacker \ud074\ub798\uc2a4\uc5d0 \uad6c\ud604\ub418\uc5b4 \uc788\uc73c\ubbc0\ub85c \uc774 \ud074\ub798\uc2a4\ub97c \uba3c\uc800 \uc0b4\ud3b4\ubcf4\uae30 \ubc14\ub780\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/image-51.png\"><img loading=\"lazy\" decoding=\"async\" width=\"912\" height=\"623\" src=\"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/image-51.png\" alt=\"1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654 \uc18c\uc2a4\ucf54\ub4dc \ud654\uba74\" class=\"wp-image-11156\" srcset=\"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/image-51.png 912w, https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/image-51-300x205.png 300w, https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/image-51-768x525.png 768w, https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/image-51-18x12.png 18w\" sizes=\"auto, (max-width: 912px) 100vw, 912px\" \/><\/a><figcaption class=\"wp-element-caption\">1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654 \uc18c\uc2a4\ucf54\ub4dc \ud654\uba74<\/figcaption><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"5.1.1._Run_sheet_\uc18c\uc2a4_\ucf54\ub4dc\"><span class=\"ez-toc-section\" id=\"511_Run_sheet_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\"><\/span>5.1.1. Run sheet \uc18c\uc2a4 \ucf54\ub4dc<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>\u201cRun BinPacking\u201d \ubc84\ud2bc\uc758 \ud074\ub9ad \uc774\ubca4\ud2b8\uc5d0 \ub300\uc751\ud558\ub294 \ucf54\ub4dc\uc774\ub2e4.<\/p>\n\n\n\n<p>Excel\uc758 Range \uac1c\uccb4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ubaa9\ub85d\uc758 base range\uc640 \uc635\uc158\uac12\ub4e4\uc744 RunBinPacking \ud504\ub85c\uc2dc\uc800\uc5d0 \uc804\ub2ec\ud55c\ub2e4. \uc5ec\uae30\uc5d0\uc11c Range\ub294 \uba85\uce6d\uc73c\ub85c \uc815\uc758\ub41c \uac1c\uccb4\ub97c \uc8fc\ub85c \uc0ac\uc6a9\ud558\uc600\ub2e4. (\uc608: Range(\u201cMaxBinSize\u201d)) Range\ub97c \uba85\uce6d\uc73c\ub85c \uc815\uc758\ud558\uba74 \ucc38\uc870 \uc8fc\uc18c\uac00 \ubcc0\uacbd\ub418\ub354\ub77c\ub3c4 \uc18c\uc2a4\ucf54\ub4dc\ub97c \ubc14\uafc0 \ud544\uc694\uac00 \uc5c6\uace0, \ud2b9\ud788 \ud589 \uc0bd\uc785, \uc5f4 \uc0bd\uc785 \ub4f1\uc758 \uae30\ub2a5\uc774 \uc2e4\ud589\ub420 \ub54c \ucc38\uc870 \uc8fc\uc18c\uac00 \uc790\ub3d9\uc73c\ub85c \ubcc0\uacbd\ub418\uc5b4 \ud3b8\ub9ac\ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Private Sub cmdRunBinPacking_Click()\n    RunBinPacking aBaseRange:=Range(\"B2\").Address, _\n                  aMaxBinSize:=Range(\"MaxBinSize\").Value, _\n                  aSizeBaseColumn:=Range(\"SizeBaseClolumn\").Value, _\n                  aIsItemSort:=Range(\"ItemSize\ub0b4\ub9bc\ucc28\uc21c\uc815\ub82c\uc5ec\ubd80\").Value\nEnd Sub<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"5.1.2._modFactory_\ubaa8\ub4c8_\uc18c\uc2a4_\ucf54\ub4dc\"><span class=\"ez-toc-section\" id=\"512_modFactory_%EB%AA%A8%EB%93%88_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\"><\/span>5.1.2. modFactory \ubaa8\ub4c8 \uc18c\uc2a4 \ucf54\ub4dc<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>\ud074\ub798\uc2a4\uc758 instance\ub97c \uc0dd\uc131\ud558\ub294 \uc5ed\ud560\uc744 \ub2f4\ub2f9\ud55c\ub2e4. VBA\uc758 \ud074\ub798\uc2a4\ub294 parameter\ub97c \uac00\uc9c0\ub294 \uc0dd\uc131\uc790 overriding\uc744 \ud560 \uc218 \uc5c6\ub2e4. Factory Pattern\uc73c\ub85c \uad6c\ud604\ud55c \ubaa8\ub4c8\uc744 \uc0dd\uc131\uc790 \ub300\uc2e0\uc5d0 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p>CreatePacker \ud504\ub85c\uc2dc\uc800\uc758 aPackingType\uc740 Bin Packing \uc54c\uace0\ub9ac\uc998 \ucc98\ub9ac \uc720\ud615\uc744 \ub098\ud0c0\ub0b4\ub294 \uc5f4\uac70\ud615 \ubcc0\uc218\uc774\ub2e4. \uac00\ub2a5\ud55c \uac12\uc740 ptNextFit, ptFirstFit, ptBestFit, ptWorstFit \ub124 \uac00\uc9c0\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Option Explicit\n\nPublic Function CreatePacker(aMaxBinSize As Long, aPackingType As PackingType) As CPacker\n    Set CreatePacker = New CPacker\n    CreatePacker.Init aMaxBinSize, aPackingType\nEnd Function\n\nPublic Function CreateBin(aMaxBinSize As Long) As CBin\n    Set CreateBin = New CBin\n    CreateBin.Init aMaxBinSize\nEnd Function<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"5.1.3._modControl_\ubaa8\ub4c8_\uc18c\uc2a4_\ucf54\ub4dc\"><span class=\"ez-toc-section\" id=\"513_modControl_%EB%AA%A8%EB%93%88_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\"><\/span>5.1.3. modControl \ubaa8\ub4c8 \uc18c\uc2a4 \ucf54\ub4dc<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>RunBinPacking \ud504\ub85c\uc2dc\uc800\uc5d0\uc11c \uc804\uccb4 \uc54c\uace0\ub9ac\uc998\uc758 \ucc98\ub9ac \uacfc\uc815\uc744 \uad00\ub9ac\ud558\ub294 \uc5ed\ud560\uc744 \ub2f4\ub2f9\ud55c\ub2e4. Parameter \uac01\uac01\uc758 \uc758\ubbf8\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>aBaseRange: \uc785\ub825\uc790\ub8cc\uc758 \uc2dc\uc791 \ubc94\uc704(\u201cB2\u201d \ub4f1\uc758 \ubb38\uc790\uc5f4)<\/li>\n\n\n\n<li>aMaxBinSize: \ud55c Bin\uc758 \ucd5c\ub300 \ud06c\uae30 \uc81c\uc57d (80, 10000 \ub4f1\uc758 \uc815\uc218)<\/li>\n\n\n\n<li>aSizeBaseColumn: \uc635\uc158\uc5d0\uc11c \uc120\ud0dd\ud55c Bin \ud06c\uae30 \uae30\uc900 \uceec\ub7fc\uba85(\u201cC\u201d \ub4f1\uc758 \ubb38\uc790\uc5f4)<\/li>\n\n\n\n<li>aIsItemSort: \ub0b4\ub9bc\ucc28\uc21c\uc815\ub82c\uc744 \uc2e4\ud589\ud560 \uc9c0\uc758 \uc5ec\ubd80(True\/False \uac12)<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Option Explicit\n\nPublic Sub RunBinPacking(aBaseRange As String, aMaxBinSize As Long, _\n                         aSizeBaseColumn As String, aIsItemSort As Boolean)\n    Application.ScreenUpdating = False\n    Application.Calculation = xlCalculationManual\n\n    Dim oBaseRange As Range, lCurRow As Long, oBinItem As CBinItem\n    Dim oInputItemCol As CBinItemCollection: Set oInputItemCol = New CBinItemCollection\n    Set oBaseRange = Range(aBaseRange)\n    Dim sSizeBaseColumn As String, lSizeColumnOffset As Long\n    sSizeBaseColumn = aSizeBaseColumn 'Range(\"SizeBaseClolumn\")\n    lSizeColumnOffset = Range(oBaseRange, sSizeBaseColumn &amp; \"2\").Columns.Count - 1\n\n    'Build up the BinItem List Collection\n    lCurRow = 0\n    For lCurRow = 0 To oBaseRange.CurrentRegion.Rows.Count\n        If Trim(oBaseRange.Offset(lCurRow, 0).Value) = \"\" Then Exit For\n        Set oBinItem = New CBinItem\n        oBinItem.m_sName = oBaseRange.Offset(lCurRow, 0).Value  'Item Name\n        oBinItem.m_lSize = oBaseRange.Offset(lCurRow, lSizeColumnOffset).Value 'Item Size \uae30\uc900 \uceec\ub7fc\uc758 \uac12(\uc608: KB, MB \ub4f1)\n        oInputItemCol.Add oBinItem, oBinItem.m_sName\n    Next lCurRow\n\n    'Item Size\ub85c \ub0b4\ub9bc\ucc28\uc21c \uc815\ub82c \ucc98\ub9ac\n    If aIsItemSort Then\n        DoLog \"\uc815\ub82c \uc804 --> \" + oInputItemCol.GetString\n        Set oInputItemCol = oInputItemCol.Sort\n        DoLog \"\uc815\ub82c \ud6c4 --> \" + oInputItemCol.GetString\n    End If\n\n    Dim lMaxBinSize As Long\n    Dim oPackerNextFit As CPacker, oPackerFirstFit As CPacker\n    Dim oPackerWorstFit As CPacker, oPackerBestFit As CPacker\n    lMaxBinSize = aMaxBinSize\n\n    'NextFit\n    Set oPackerNextFit = CreatePacker(lMaxBinSize, ptNextFit)\n    oPackerNextFit.DoPacking oInputItemCol\n    oPackerNextFit.DoOutput Worksheets(\"Next Fit\")\n    Set oPackerNextFit = Nothing\n\n    'FirstFit\n    Set oPackerFirstFit = CreatePacker(lMaxBinSize, ptFirstFit)\n    oPackerFirstFit.DoPacking oInputItemCol\n    oPackerFirstFit.DoOutput Worksheets(\"First Fit\")\n    Set oPackerFirstFit = Nothing\n\n    'WorstFit\n    Set oPackerWorstFit = CreatePacker(lMaxBinSize, ptWorstFit)\n    oPackerWorstFit.DoPacking oInputItemCol\n    oPackerWorstFit.DoOutput Worksheets(\"Worst Fit\")\n    Set oPackerWorstFit = Nothing\n\n    'BestFit\n    Set oPackerBestFit = CreatePacker(lMaxBinSize, ptBestFit)\n    oPackerBestFit.DoPacking oInputItemCol\n    oPackerBestFit.DoOutput Worksheets(\"Best Fit\")\n    Set oPackerBestFit = Nothing\n\n    Worksheets(\"Result Summary\").Activate\n    Worksheets(\"Result Summary\").Range(\"E1\") = lMaxBinSize\n    DoEvents\n\n    Application.Calculation = xlCalculationAutomatic\n    Application.ScreenUpdating = True\nEnd Sub<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"5.1.4._modUtil_\ubaa8\ub4c8_\uc18c\uc2a4_\ucf54\ub4dc\"><span class=\"ez-toc-section\" id=\"514_modUtil_%EB%AA%A8%EB%93%88_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\"><\/span>5.1.4. modUtil \ubaa8\ub4c8 \uc18c\uc2a4 \ucf54\ub4dc<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Logging, \uc18c\uc694\uc2dc\uac04\uc744 \ubb38\uc790\uc5f4 \ud615\uc2dd\uc73c\ub85c \ubcc0\ud658\ud558\ub294 \ub4f1\uc758 \uacf5\ud1b5\uae30\ub2a5\uc744 \ub2f4\ub2f9\ud55c\ub2e4. Logging\uc740 Windows API OutputDebugString\uc744 \uc774\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Option Explicit\n#Const DEBUGMODE = 1\n\n#If VBA7 Then 'For 64 Bit Systems\n    Public Declare PtrSafe Sub Sleep Lib \"kernel32\" (ByVal dwMilliseconds As LongPtr)\n    Private Declare PtrSafe Sub OutputDebugString Lib \"kernel32\" Alias \"OutputDebugStringA\" (ByVal lpOutputString As String)\n#Else 'For 32 Bit Systems\n    Public Declare Sub Sleep Lib \"kernel32\" (ByVal dwMilliseconds As Long)\n    Private Declare Sub OutputDebugString Lib \"kernel32\" Alias \"OutputDebugStringA\" (ByVal lpOutputString As String)\n#End If\n\n'OutputDebugString API\ub97c \uc774\uc6a9\ud55c Debug Message \ucd9c\ub825\n'DebugView\ub4f1\uc744 \uc774\uc6a9\ud558\uc5ec \uba54\uc2dc\uc9c0 View \uac00\ub2a5\ud568\nPublic Sub DoLog(aMsg As String)\n    #If DEBUGMODE >= 1 Then\n        OutputDebugString \"[Bin] \" &amp; aMsg\n    #End If\nEnd Sub\n\nFunction GetTimeString(dTime As Double) As String\n  Dim H As Integer, M As Integer, S As Integer, MS As Integer, dMS As Double, sMS As String\n\n  H = Int(dTime \/ 3600)\n  M = Int(dTime \/ 60) Mod 60\n  S = Int(dTime Mod 60)\n  dMS = (dTime - Int(dTime))\n  'MS = dMS * 10 ^ (Len(CStr(dMS)) - 2)\n  sMS = Mid(CStr(dMS), 3, Len(dMS))\n\nGetTimeString = Format(H, \"00\") &amp; \":\" &amp; Format(M, \"00\") &amp; \":\" &amp; Format(S, \"00\") &amp; \".\" &amp; sMS\n\nEnd Function<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"5.1.5._CPacker_\ud074\ub798\uc2a4_\uc18c\uc2a4_\ucf54\ub4dc\"><span class=\"ez-toc-section\" id=\"515_CPacker_%ED%81%B4%EB%9E%98%EC%8A%A4_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\"><\/span>5.1.5. CPacker \ud074\ub798\uc2a4 \uc18c\uc2a4 \ucf54\ub4dc<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>\uc785\ub825\uc790\ub8cc\ub97c \uae30\uc874 Bin \ubaa9\ub85d \uc911 \uc801\ud569\ud55c \uacf3\uc5d0 \ucc44\uc6b0\uac70\ub098 \uc0c8\ub85c\uc6b4 Bin\uc744 \uc0dd\uc131\ud558\uc5ec \ucc44\uc6b0\ub294 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \uad6c\ud604\ud55c\ub2e4. \uc8fc\uc694 \ubcc0\uc218, \ud504\ub85c\uc2dc\uc800, \ud568\uc218\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bin&nbsp;\uac1c\uccb4\uc758&nbsp;\ubaa9\ub85d\uc744&nbsp;m_oBinCol&nbsp;collection&nbsp;\ubcc0\uc218\ub85c&nbsp;\uad00\ub9ac\ud558\uace0,&nbsp;\uac01&nbsp;Bin&nbsp;\uac1c\uccb4\uc758&nbsp;\uc794\uc5ec\uacf5\uac04&nbsp;\ud569\uacc4\ub97c&nbsp;lRemainSizeSum&nbsp;\ubcc0\uc218\ub85c&nbsp;\uad00\ub9ac\ud55c\ub2e4.<\/li>\n\n\n\n<li>Init \ud504\ub85c\uc2dc\uc800: Bin\uc758 \ucd5c\ub300 \ud06c\uae30\uc640 \ucc44\uc6b0\ub294 \uc54c\uace0\ub9ac\uc998\uc758 \uc720\ud615(Next Fit, First Fit, Best Fit, Worst Fit)\uc744 \uc124\uc815\ud55c\ub2e4.<br>Add \ud504\ub85c\uc2dc\uc800: parameter\ub85c \uc804\ub2ec\ubc1b\uc740 Bin \uac1c\uccb4\ub97c m_oBinCol collection \ubcc0\uc218\uc5d0 \ucd94\uac00\ud558\uace0 \uc774\ub984\uc744 \u201cBin_\uc21c\ubc885\uc790\ub9ac\u201d\ub85c \uc0dd\uc131\ud55c\ub2e4.<\/li>\n\n\n\n<li>DoPacking \ud504\ub85c\uc2dc\uc800: parameter\ub85c \uc804\ub2ec\ubc1b\uc740 Item\ubaa9\ub85d\uc744 Bin \uac1c\uccb4 \ubaa9\ub85d\uc5d0 \ucc44\uc6b4\ub2e4.<\/li>\n\n\n\n<li>GetNewBin \ud568\uc218: modFactory \ubaa8\ub4c8\uc758 CrreateBin \ud568\uc218\ub97c \uc774\uc6a9\ud558\uc5ec \uc0c8\ub85c\uc6b4 Bin \uac1c\uccb4\ub97c \uc0dd\uc131\ud55c\ub2e4.<\/li>\n\n\n\n<li>GetBinNextFit \ud568\uc218: parameter\ub85c \uc804\ub2ec\ubc1b\uc740 BinItem\uc744 Next Fit \uc54c\uace0\ub9ac\uc998\uc73c\ub85c \ucc44\uc6b8 \uc801\ud569\ud55c Bin\uc744 \uc120\ud0dd\ud558\uac70\ub098 \uc0c8\ub85c \uc0dd\uc131\ud558\uc5ec \ubc18\ud658\ud55c\ub2e4.<\/li>\n\n\n\n<li>GetBinFirstFit \ud568\uc218: parameter\ub85c \uc804\ub2ec\ubc1b\uc740 BinItem\uc744 First Fit \uc54c\uace0\ub9ac\uc998\uc73c\ub85c \ucc44\uc6b8 \uc801\ud569\ud55c Bin\uc744 \uc120\ud0dd\ud558\uac70\ub098 \uc0c8\ub85c \uc0dd\uc131\ud558\uc5ec \ubc18\ud658\ud55c\ub2e4.<\/li>\n\n\n\n<li>GetBinWorstFit \ud568\uc218: parameter\ub85c \uc804\ub2ec\ubc1b\uc740 BinItem\uc744 Worst Fit \uc54c\uace0\ub9ac\uc998\uc73c\ub85c \ucc44\uc6b8 \uc801\ud569\ud55c Bin\uc744 \uc120\ud0dd\ud558\uac70\ub098 \uc0c8\ub85c \uc0dd\uc131\ud558\uc5ec \ubc18\ud658\ud55c\ub2e4.<\/li>\n\n\n\n<li>GetBinBestFit \ud568\uc218: parameter\ub85c \uc804\ub2ec\ubc1b\uc740 BinItem\uc744 Best Fit \uc54c\uace0\ub9ac\uc998\uc73c\ub85c \ucc44\uc6b8 \uc801\ud569\ud55c Bin\uc744 \uc120\ud0dd\ud558\uac70\ub098 \uc0c8\ub85c \uc0dd\uc131\ud558\uc5ec \ubc18\ud658\ud55c\ub2e4.<\/li>\n\n\n\n<li>PackToBin \ud504\ub85c\uc2dc\uc800: \uc124\uc815\ud55c \uc54c\uace0\ub9ac\uc998\uc758 \uc720\ud615\uc5d0 \ub530\ub77c \uc801\ud569\ud55c \ud568\uc218\ub97c \ud638\ucd9c\ud558\uc5ec BinItem\uc744 \ucc44\uc6b4\ub2e4.<\/li>\n\n\n\n<li>DoOutput \ud504\ub85c\uc2dc\uc800: Bin Packing \ucc98\ub9ac \uacb0\uacfc\ub97c \uc9c0\uc815\ud55c sheet\uc5d0 \ucd9c\ub825\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Option Explicit\n\nPublic m_oBinCol As Collection\nPublic m_dElapsedTime As Double\nPublic Enum PackingType\n    ptNextFit\n    ptFirstFit\n    ptBestFit\n    ptWorstFit\nEnd Enum\n\nPrivate m_lMaxBinSize As Long\nPrivate m_lLastBinIndex As Long\nPrivate m_PackingType As PackingType\nPrivate m_lCompareCount As Long '\ube44\uad50\uc5f0\uc0b0\uc758 \ud69f\uc218 \ub204\uc801\nPrivate m_lRemainSizeSum As Long '\uc794\uc5ec\uacf5\uac04 \ud569\uacc4\nPrivate m_oTimer As CTimer\n\nPrivate Sub Class_Initialize()\n    Set m_oBinCol = New Collection\n    Set m_oTimer = New CTimer\n    m_lLastBinIndex = 1\n    m_lCompareCount = 0\nEnd Sub\n\nPrivate Sub Class_Terminate()\n    Set m_oBinCol = Nothing\n    Set m_oTimer = Nothing\nEnd Sub\n\nPublic Sub Init(aMaxBinSize As Long, aPackingType As PackingType)\n    m_lMaxBinSize = aMaxBinSize\n    m_PackingType = aPackingType\nEnd Sub\n\n'\uc785\ub825\uc790\ub8cc \ubaa9\ub85d\uc744 \uc785\ub825\uc73c\ub85c \uc804\uccb4 \ucc44\uc6b0\uae30 \uc2e4\ud589\nPublic Sub DoPacking(aInputItemCol As CBinItemCollection)\n    Dim oBinItem As CBinItem\n    m_oTimer.StartCounter\n    For Each oBinItem In aInputItemCol.m_oBinItemCol\n        Me.PackToBin oBinItem\n    Next\n    Me.m_dElapsedTime = m_oTimer.TimeElapsed\nEnd Sub\n\n'\ud55c Item \ucc44\uc6b0\uae30\nPublic Sub PackToBin(oBinItem As CBinItem)\n    Dim oBin As CBin\n    'Select Case ePackingType\n    Select Case m_PackingType\n        Case ptNextFit\n            Set oBin = GetBinNextFit(oBinItem)\n        Case ptFirstFit\n            Set oBin = GetBinFirstFit(oBinItem)\n        Case ptWorstFit\n            Set oBin = GetBinWorstFit(oBinItem)\n        Case ptBestFit\n            Set oBin = GetBinBestFit(oBinItem)\n    End Select\n    oBin.AddBinItem oBinItem\nEnd Sub\n\n\nPublic Sub Add(oBin As CBin)\n    m_oBinCol.Add oBin\n    oBin.m_lIndex = m_oBinCol.Count\n    'oBin.m_sName = \"Bin\" + CStr(m_oBinCol.Count)\n    oBin.m_sName = \"Bin_\" + Format(CStr(m_oBinCol.Count), \"00000\")\nEnd Sub\n\nPublic Function GetNewBin() As CBin\n    Dim oBin As CBin\n    'Set oBin = New CBin\n    Set oBin = CreateBin(m_lMaxBinSize)\n    Me.Add oBin\n    Set GetNewBin = oBin\nEnd Function\n\n'NextFit\nPublic Function GetBinNextFit(oBinItem As CBinItem) As CBin\n    Dim oBin As CBin, oResult As CBin\n    If m_oBinCol.Count = 0 Then\n        '\uccab\ubc88\uc9f8 \uc2e4\ud589\uc778 \uacbd\uc6b0\n        Set oResult = GetNewBin\n        m_lLastBinIndex = 1\n    Else\n        Set oBin = m_oBinCol(m_lLastBinIndex)\n        m_lCompareCount = m_lCompareCount + 1\n        If oBin.IsAbleToAdd(oBinItem) Then\n            Set oResult = oBin\n        Else\n            Set oResult = GetNewBin\n            m_lLastBinIndex = oResult.m_lIndex\n        End If\n    End If\n    Set GetBinNextFit = oResult\nEnd Function\n\n'FirstFit\nPublic Function GetBinFirstFit(oBinItem As CBinItem) As CBin\n    Dim oBin As CBin, bFound As Boolean, lCurBinIndex As Long, oResult As CBin\n    bFound = False\n    '\ud56d\uc0c1 \ucc98\uc74c Bin\ubd80\ud130 \ud655\uc778\ud558\uc5ec \ucd94\uac00\ud560 \uc218 \uc788\ub294 Bin return\n    For lCurBinIndex = 1 To m_oBinCol.Count\n    'For Each oBin In m_oBinCol\n        Set oBin = m_oBinCol(lCurBinIndex)\n        m_lCompareCount = m_lCompareCount + 1\n        If oBin.IsAbleToAdd(oBinItem) Then\n            bFound = True\n            Set oResult = oBin\n            Exit For\n        End If\n    Next\n    If Not bFound Then\n        Set oResult = GetNewBin\n    End If\n    Set GetBinFirstFit = oResult\nEnd Function\n\n'WorstFit\nPublic Function GetBinWorstFit(oBinItem As CBinItem) As CBin\n    Dim oBin As CBin, bFound As Boolean, lCurBinIndex As Long, oResult As CBin\n    Dim lMaxRemainSize As Long, lMaxRemainSizeBinIndex As Long\n    lMaxRemainSize = 0: lMaxRemainSizeBinIndex = 0\n    '\ubaa8\ub4e0 Bin\uc911\uc5d0\uc11c \ub0a8\uc740 Size\uac00 \uac00\uc7a5 \ud06c\uace0 oBinItem\uc744 \ucd94\uac00\ud560 \uc218 \uc788\ub294 Bin\uc744 return\n    '\ucd94\uac00\ud560 \uc218 \uc788\ub294 Bin\uc774 \uc5c6\uc73c\uba74 \uc0c8 Bin\uc744 \uc0dd\uc131\n    For lCurBinIndex = 1 To m_oBinCol.Count\n        '\ub0a8\uc740 Size\uac00 \uac00\uc7a5 \ud070 Bin \ucc3e\uae30\n        Set oBin = m_oBinCol(lCurBinIndex)\n        m_lCompareCount = m_lCompareCount + 1\n        If lMaxRemainSize &lt; oBin.m_lRemainSize Then\n            lMaxRemainSize = oBin.m_lRemainSize\n            lMaxRemainSizeBinIndex = lCurBinIndex\n        End If\n    Next\n\n    bFound = False\n    m_lCompareCount = m_lCompareCount + 1\n    If lMaxRemainSizeBinIndex > 0 Then\n        Set oBin = m_oBinCol(lMaxRemainSizeBinIndex)\n        If oBinItem.m_lSize &lt;= oBin.m_lRemainSize Then\n            bFound = True\n            Set oResult = oBin\n        End If\n    End If\n    If Not bFound Then\n        Set oResult = GetNewBin\n    End If\n    Set GetBinWorstFit = oResult\nEnd Function\n\n'BestFit\nPublic Function GetBinBestFit(oBinItem As CBinItem) As CBin\n    Dim oBin As CBin, bFound As Boolean, lCurBinIndex As Long, oResult As CBin\n    Dim lMinRemainSize As Long, lMinRemainSizeBinIndex As Long\n    lMinRemainSize = m_lMaxBinSize\n    lMinRemainSizeBinIndex = 0\n    '\ubaa8\ub4e0 Bin\uc911\uc5d0\uc11c \ub0a8\uc740 Size\uac00 \uac00\uc7a5 \uc801\uc73c\uba74\uc11c oBinItem\uc744 \ucd94\uac00\ud560 \uc218 \uc788\ub294 Bin\uc744 return\n    '\ucd94\uac00\ud560 \uc218 \uc788\ub294 Bin\uc774 \uc5c6\uc73c\uba74 \uc0c8 Bin\uc744 \uc0dd\uc131\n    For lCurBinIndex = 1 To m_oBinCol.Count\n        'oBinItem\uc744 \ucd94\uac00\ud560 \uc218 \uc788\ub294 Bin\uc911 \ub0a8\uc740 Size\uac00 \uac00\uc7a5 \uc791\uc740 Bin \ucc3e\uae30\n        Set oBin = m_oBinCol(lCurBinIndex)\n        m_lCompareCount = m_lCompareCount + 1\n        If oBin.m_lRemainSize >= oBinItem.m_lSize And _\n           lMinRemainSize > oBin.m_lRemainSize Then\n            lMinRemainSize = oBin.m_lRemainSize\n            lMinRemainSizeBinIndex = lCurBinIndex\n        End If\n    Next\n\n    bFound = False\n    m_lCompareCount = m_lCompareCount + 1\n    If lMinRemainSizeBinIndex > 0 Then\n        Set oBin = m_oBinCol(lMinRemainSizeBinIndex)\n        bFound = True\n        Set oResult = oBin\n    End If\n    If Not bFound Then\n        Set oResult = GetNewBin\n    End If\n    Set GetBinBestFit = oResult\nEnd Function\n\n'\uacb0\uacfc \ucd9c\ub825\nPublic Sub DoOutput(oResultSht As Worksheet)\n    oResultSht.Activate\n    Dim oResultBaseRange As Range, oBin As CBin, lCurRow As Long, oBinItem As CBinItem\n    Set oResultBaseRange = oResultSht.Range(\"A2\")\n    'oResultBaseRange.End(xlDown).Resize(0, 2).Clear\n    oResultBaseRange.Select\n    Range(Selection, Selection.End(xlDown)).Select\n    Selection.Resize(, 3).Select\n    'Range(Selection, Selection.End(xlToRight)).Select\n    Selection.ClearContents\n    oResultBaseRange.Select\n    lCurRow = 0\n    oResultSht.Range(\"I1\") = m_dElapsedTime '\uc18c\uc694\uc2dc\uac04\n    oResultSht.Range(\"J1\").NumberFormatLocal = \"@\"\n    oResultSht.Range(\"J1\") = GetTimeString(m_dElapsedTime)\n    oResultSht.Range(\"I2\") = m_lCompareCount '\ube44\uad50\ud69f\uc218\n    oResultSht.Range(\"I3\") = GetRemainSizeSum '\uc794\uc5ec\uacf5\uac04\ud569\uacc4\n    oResultSht.Range(\"I4\") = Me.m_oBinCol.Count * m_lMaxBinSize  '\uc804\uccb4\uacf5\uac04\ud569\uacc4\n    For Each oBin In Me.m_oBinCol\n        For Each oBinItem In oBin.m_oBinItemCol.m_oBinItemCol\n            oResultBaseRange.Offset(lCurRow, 0) = oBin.m_sName\n            oResultBaseRange.Offset(lCurRow, 1) = oBinItem.m_sName\n            oResultBaseRange.Offset(lCurRow, 2) = oBinItem.m_lSize\n            lCurRow = lCurRow + 1\n        Next\n    Next\n    Dim pt As PivotTable, sDataRange As String\n    sDataRange = oResultSht.Name + \"!R1C1:R\" + CStr(oResultBaseRange.CurrentRegion.Rows.Count) + _\n                 \"C\" + CStr(oResultBaseRange.CurrentRegion.Columns.Count)\n    For Each pt In oResultSht.PivotTables\n        pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=sDataRange, Version:=xlPivotTableVersion14)\n        pt.RefreshTable\n    Next\n    oResultBaseRange.Select\nEnd Sub\n\n'\uc794\uc5ec\uacf5\uac04 \ud569\uacc4 \uacc4\uc0b0\ud6c4 return\nPublic Function GetRemainSizeSum() As Long\n    m_lRemainSizeSum = 0\n    Dim oBin As CBin\n    For Each oBin In Me.m_oBinCol\n        m_lRemainSizeSum = m_lRemainSizeSum + oBin.m_lRemainSize\n    Next\n    GetRemainSizeSum = m_lRemainSizeSum\nEnd Function<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"5.1.6._CBin_\ud074\ub798\uc2a4_\uc18c\uc2a4_\ucf54\ub4dc\"><span class=\"ez-toc-section\" id=\"516_CBin_%ED%81%B4%EB%9E%98%EC%8A%A4_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\"><\/span>5.1.6. CBin \ud074\ub798\uc2a4 \uc18c\uc2a4 \ucf54\ub4dc<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>\uac1c\ubcc4 Bin\uc744 \uad6c\ud604\ud55c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bin\uc5d0 \ucc44\uc6cc\uc9c4 Item\uc744 m_oBinItemCol collection \ubcc0\uc218\ub85c \uad00\ub9ac\ud55c\ub2e4.<\/li>\n\n\n\n<li>Init \ud504\ub85c\uc2dc\uc800: Bin\uc758 \ucd5c\ub300 \ud06c\uae30\ub97c \uc124\uc815\ud55c\ub2e4.<\/li>\n\n\n\n<li>AddBinItem \ud504\ub85c\uc2dc\uc800: item\uc744 \ud604\uc7ac Bin\uc5d0 \ucc44\uc6b0\ub294 \uc758\ubbf8\ub85c m_oBinItemCol collection\uc5d0 \ucd94\uac00\ud55c\ub2e4. \uc774\ub54c, \ud574\ub2f9 Item\uc758 \ud06c\uae30\ub97c \ud604\uc7ac Bin\uc758 \ud06c\uae30\uc5d0 \ub354\ud558\uc5ec m_lCurSize \ubcc0\uc218\ub85c \uad00\ub9ac\ud558\uace0, Bin\uc758 \ucd5c\ub300 \ud06c\uae30\uc5d0\uc11c \ud604\uc7ac Bin\uc758 \ud06c\uae30\ub97c \ube7c\uc11c \ub0a8\ub294 \ud06c\uae30\ub294 m_lRemainSize \ubcc0\uc218\ub85c \uad00\ub9ac\ud55c\ub2e4.<\/li>\n\n\n\n<li>IsAbleToAdd: parameter\ub85c \uc804\ub2ec\ubc1b\uc740 BinItem\uc744 \ud604\uc7ac Bin\uc5d0 \ucc44\uc6b8 \uc218 \uc788\ub294\uc9c0\ub97c \ud310\ubcc4\ud55c\ub2e4. \ud604\uc7ac Bin\uc758 \ud06c\uae30\uc5d0 Item\uc758 \ud06c\uae30\ub97c \ub354\ud55c \uacb0\uacfc\uac00 \ucd5c\ub300 \ud06c\uae30 \uc774\ud558\uc774\uba74 True\uc774\ub2e4.<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Option Explicit\n\nPublic m_oBinItemCol As CBinItemCollection\nPublic m_lIndex As Long\nPublic m_sName As String\nPublic m_lCurSize As Long\nPublic m_lMaxSize As Long\nPublic m_lRemainSize As Long\n\nPrivate Sub Class_Initialize()\n    Set m_oBinItemCol = New CBinItemCollection\n    m_lCurSize = 0\nEnd Sub\n\nPrivate Sub Class_Terminate()\n    Set m_oBinItemCol = Nothing\nEnd Sub\n\nPublic Sub Init(lMaxBinSize As Long)\n    m_lMaxSize = lMaxBinSize\nEnd Sub\n\nPublic Sub AddBinItem(oBinItem As CBinItem)\n    m_oBinItemCol.Add oBinItem, oBinItem.m_sName\n    m_lCurSize = m_lCurSize + oBinItem.m_lSize\n    m_lRemainSize = m_lMaxSize - m_lCurSize\n    If m_lRemainSize &lt; 0 Then m_lRemainSize = 0\nEnd Sub\n\nPublic Function IsAbleToAdd(oBinItem As CBinItem) As Boolean\n    IsAbleToAdd = m_lCurSize + oBinItem.m_lSize &lt;= m_lMaxSize\nEnd Function<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"5.1.7._CBinItemCollection_\ud074\ub798\uc2a4_\uc18c\uc2a4_\ucf54\ub4dc\"><span class=\"ez-toc-section\" id=\"517_CBinItemCollection_%ED%81%B4%EB%9E%98%EC%8A%A4_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\"><\/span>5.1.7. CBinItemCollection \ud074\ub798\uc2a4 \uc18c\uc2a4 \ucf54\ub4dc<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>BinItem\uc758 \ubaa9\ub85d\uc744 \uad6c\ud604\ud55c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>BinItem\uc758 \ubaa9\ub85d\uc744 m_oBinItemCol collection \ubcc0\uc218\ub85c \uad00\ub9ac\ud55c\ub2e4.<\/li>\n\n\n\n<li>Add \ud504\ub85c\uc2dc\uc800: parameter\ub85c \uc804\ub2ec\ubc1b\uc740 Item\uc744 m_oBinItemCol collection\uc5d0 \ucd94\uac00\ud55c\ub2e4.<\/li>\n\n\n\n<li>Sort \ud568\uc218: m_oBinItemCol collection\uc744 \uac01 Item\uc758 \ud06c\uae30 \ub0b4\ub9bc\ucc28\uc21c\uc73c\ub85c \uc815\ub82c\ud55c \uc0c8\ub85c\uc6b4 collection\uc744 \ubc18\ud658\ud55c\ub2e4.<\/li>\n\n\n\n<li>GetString \ud568\uc218: \uc804\uccb4 Item\uc744 [\uba85\uce6d: \ud06c\uae30]\uc758 \ud615\uc2dd\uc73c\ub85c \ubb38\uc790\uc5f4\ub85c \ub9cc\ub4e4\uc5b4 \ubc18\ud658\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Option Explicit\n\nPublic m_oBinItemCol As Collection\n\nPrivate Sub Class_Initialize()\n    Set m_oBinItemCol = New Collection\nEnd Sub\n\nPrivate Sub Class_Terminate()\n    Set m_oBinItemCol = Nothing\nEnd Sub\n\nPublic Sub Add(aBinItem As CBinItem, Optional aKey As String = \"\")\n    m_oBinItemCol.Add aBinItem, IIf(aKey = \"\", aBinItem.m_sName, aKey)\nEnd Sub\n\n'BinItem\uc758 Size\ub85c \ub0b4\ub9bc\ucc28\uc21c \uc815\ub82c\nPublic Function Sort() As CBinItemCollection\n    Dim i As Long, j As Long, k As Long, bln As Boolean\n    Dim lngCount As Long, arr() As Long, oSortedBinItemCol As CBinItemCollection\n    lngCount = m_oBinItemCol.Count\n    If lngCount > 0 Then\n        ReDim arr(0 To lngCount - 1)\n        For i = 0 To lngCount - 1: arr(i) = i + 1: Next\n\n        For i = 1 To lngCount - 1\n            k = arr(i)\n            j = i - 1\n            bln = False\n            Do\n                If m_oBinItemCol(arr(j)).CompareTo(m_oBinItemCol(k)) > 0 Then\n                    arr(j + 1) = arr(j)\n                    j = j - 1\n                    If j &lt; 0 Then bln = True\n                Else\n                    bln = True\n                End If\n            Loop Until bln\n            arr(j + 1) = k\n        Next\n    End If\n\n    Set oSortedBinItemCol = New CBinItemCollection\n    For i = lngCount - 1 To 0 Step -1: oSortedBinItemCol.Add m_oBinItemCol(arr(i)): Next\n\n    Set Sort = oSortedBinItemCol\nEnd Function\n\n'BinItem \ubaa9\ub85d\uc744 \ubb38\uc790\uc5f4\ub85c \ubc18\ud658\nPublic Function GetString() As String\n    Dim sResult As String, oBinItem As CBinItem\n    For Each oBinItem In m_oBinItemCol\n        sResult = sResult + \"[\" + oBinItem.m_sName + \":\" + CStr(oBinItem.m_lSize) + \"], \"\n    Next\n    If Len(sResult) > 2 Then sResult = Left(sResult, Len(sResult) - 2)\n    GetString = sResult\nEnd Function<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"5.1.8._CBinItem_\ud074\ub798\uc2a4_\uc18c\uc2a4_\ucf54\ub4dc\"><span class=\"ez-toc-section\" id=\"518_CBinItem_%ED%81%B4%EB%9E%98%EC%8A%A4_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\"><\/span>5.1.8. CBinItem \ud074\ub798\uc2a4 \uc18c\uc2a4 \ucf54\ub4dc<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>Bin\uc5d0 \ub2f4\uae38 Item\uc744 \uad6c\ud604\ud55c\ub2e4.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Item\uc758 \uc774\ub984\uc740 m_sName, \ud06c\uae30\ub294 m_lSize\ub85c \uad00\ub9ac\ud55c\ub2e4.<\/li>\n\n\n\n<li>CompareTo \ud568\uc218: \ud604\uc7ac Item\uacfc \ube44\uad50\ub300\uc0c1 Item\uc758 \ud06c\uae30\ub97c \ube44\uad50\ud55c \uacb0\uacfc\ub97c \ubc18\ud658\ud55c\ub2e4.<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Option Explicit\n\nPublic m_sName  As String\nPublic m_lSize  As Long\n\n'BinItem\uc758 size \ube44\uad50 \ud568\uc218\n'   - parameter: \ube44\uad50\ub300\uc0c1 BinItem(B)\n'   - \ube44\uad50\uae30\uc900: \uc790\uae30\uc790\uc2e0 BinItem(A)\n'Return \uac12(Long type)\n'  0: \ub3d9\uc77c\ud568 (A = B)\n'  1: \ube44\uad50\ub300\uc0c1 BinItem\uc774 \ub354 \ud07c(A &lt; B)\n' -1: \uc790\uae30\uc790\uc2e0 BinItem\uc774 \ub354 \ud07c(A > B)\nPublic Function CompareTo(oBinItem As CBinItem) As Long\n    Dim i As Long\n \n    If Me.m_lSize = oBinItem.m_lSize Then\n        i = 0\n    ElseIf Me.m_lSize &lt; oBinItem.m_lSize Then\n        i = -1\n    Else\n        i = 1\n    End If\n \n    CompareTo = i\nEnd Function<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"5.1.9._CTimer_\ud074\ub798\uc2a4_\uc18c\uc2a4_\ucf54\ub4dc\"><span class=\"ez-toc-section\" id=\"519_CTimer_%ED%81%B4%EB%9E%98%EC%8A%A4_%EC%86%8C%EC%8A%A4_%EC%BD%94%EB%93%9C\"><\/span>5.1.9. CTimer \ud074\ub798\uc2a4 \uc18c\uc2a4 \ucf54\ub4dc<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>&nbsp;\uac01 \uc54c\uace0\ub9ac\uc998\uc758 \uc2e4\ud589\uc2dc\uac04\uc744 \uc815\ud655\ud558\uac8c \uce21\uc815\ud558\uae30 \uc704\ud574 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p>\ucd9c\ucc98:&nbsp;<a href=\"https:\/\/stackoverflow.com\/questions\/198409\/how-do-you-test-running-time-of-vba-code\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/stackoverflow.com\/questions\/198409\/how-do-you-test-running-time-of-vba-code<\/a><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"visualbasic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Option Explicit\n\nPrivate Type LARGE_INTEGER\n    lowpart As Long\n    highpart As Long\nEnd Type\n\nPrivate Declare Function QueryPerformanceCounter Lib \"kernel32\" (lpPerformanceCount As LARGE_INTEGER) As Long\nPrivate Declare Function QueryPerformanceFrequency Lib \"kernel32\" (lpFrequency As LARGE_INTEGER) As Long\n\nPrivate m_CounterStart As LARGE_INTEGER\nPrivate m_CounterEnd As LARGE_INTEGER\nPrivate m_crFrequency As Double\n\nPrivate Const TWO_32 = 4294967296# ' = 256# * 256# * 256# * 256#\n\nPrivate Function LI2Double(LI As LARGE_INTEGER) As Double\n    Dim Low As Double\n    Low = LI.lowpart\n    If Low &lt; 0 Then\n        Low = Low + TWO_32\n    End If\n    LI2Double = LI.highpart * TWO_32 + Low\nEnd Function\n\nPrivate Sub Class_Initialize()\n    Dim PerfFrequency As LARGE_INTEGER\n    QueryPerformanceFrequency PerfFrequency\n    m_crFrequency = LI2Double(PerfFrequency)\nEnd Sub\n\nPublic Sub StartCounter()\n    QueryPerformanceCounter m_CounterStart\nEnd Sub\n\nProperty Get TimeElapsed() As Double\n    Dim crStart As Double\n    Dim crStop As Double\n    QueryPerformanceCounter m_CounterEnd\n    crStart = LI2Double(m_CounterStart)\n    crStop = LI2Double(m_CounterEnd)\n    'TimeElapsed = 1000# * (crStop - crStart) \/ m_crFrequency\n    TimeElapsed = Round((crStop - crStart) \/ m_crFrequency, 4)\nEnd Property<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"has-medium-font-size\">&lt;&lt; <strong>\uad00\ub828 \uae00 \ubaa9\ub85d<\/strong> &gt;&gt;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-1\/\">1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_1.\uac1c\uc694<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-2\/\">1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_2.\uc54c\uace0\ub9ac\uc998(1)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-3\/\">1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_2.\uc54c\uace0\ub9ac\uc998(2)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-4\/\">1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_3.\uad6c\ud604(1)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-5\/\">1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_3.\uad6c\ud604(2)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/\">1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_4.\ubcc4\ucca8<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-7\/\">1\ucc28\uc6d0 Bin Packing \ub3c4\uad6c \ucd5c\uadfc \ubcc0\uacbd \uc0ac\ud56d (2021-03-21 \uae30\uc900)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-toc\/\">1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654 \ub3c4\uad6c \uc124\uba85\uae00 \uc804\uccb4 \ubaa9\ucc28, \ub2e4\uc6b4\ub85c\ub4dc<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>The source code of this article is based on the first version of the Bin Packing tool. Please refer to the latest version with improved functions. 1D Bin Packing Tool Recent Changes (as of 2021-03-21) 5. Attachment 5.1. Excel VBA-based tool source code Bin implemented with Excel VBA...<\/p>","protected":false},"author":1,"featured_media":11156,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25],"tags":[15,16,17,18],"class_list":["post-11152","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-1d-bin-packing-tool","tag-python","tag-binpacking","tag-vba","tag-18"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_4.\ubcc4\ucca8<\/title>\n<meta name=\"description\" content=\"\uc5d1\uc140 VBA \uae30\ubc18 \ub3c4\uad6c\uc758 \uac01 Sheet, Module, Class\uc758 \uc8fc\uc694 \uad6c\ud604 \ub0b4\uc6a9 \ub0b4\uc6a9\uacfc \uc18c\uc2a4 \ucf54\ub4dc\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf8\ub2e4. \uc54c\uace0\ub9ac\uc998\uc758 \ub300\ubd80\ubd84\uc740 CPacker \ud074\ub798\uc2a4\uc5d0 \uad6c\ud604\ub418\uc5b4 \uc788\uc73c\ubbc0\ub85c \uc774 \ud074\ub798\uc2a4\ub97c \uba3c\uc800 \uc0b4\ud3b4\ubcf4\uae30 \ubc14\ub780\ub2e4.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_4.\ubcc4\ucca8\" \/>\n<meta property=\"og:description\" content=\"\uc5d1\uc140 VBA \uae30\ubc18 \ub3c4\uad6c\uc758 \uac01 Sheet, Module, Class\uc758 \uc8fc\uc694 \uad6c\ud604 \ub0b4\uc6a9 \ub0b4\uc6a9\uacfc \uc18c\uc2a4 \ucf54\ub4dc\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf8\ub2e4. \uc54c\uace0\ub9ac\uc998\uc758 \ub300\ubd80\ubd84\uc740 CPacker \ud074\ub798\uc2a4\uc5d0 \uad6c\ud604\ub418\uc5b4 \uc788\uc73c\ubbc0\ub85c \uc774 \ud074\ub798\uc2a4\ub97c \uba3c\uc800 \uc0b4\ud3b4\ubcf4\uae30 \ubc14\ub780\ub2e4.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/\" \/>\n<meta property=\"og:site_name\" content=\"\uc0dd\uc0b0\uc131 Skill\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-06T09:29:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-15T03:00:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/image-51.png\" \/>\n\t<meta property=\"og:image:width\" content=\"912\" \/>\n\t<meta property=\"og:image:height\" content=\"623\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Zerom\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Zerom\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/\"},\"author\":{\"name\":\"Zerom\",\"@id\":\"https:\\\/\\\/prodskill.com\\\/ko\\\/#\\\/schema\\\/person\\\/bbad0870c78008c82edbe0960fe768bd\"},\"headline\":\"1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_4.\ubcc4\ucca8\",\"datePublished\":\"2022-09-06T09:29:28+00:00\",\"dateModified\":\"2022-11-15T03:00:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/\"},\"wordCount\":236,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/prodskill.com\\\/ko\\\/#\\\/schema\\\/person\\\/bbad0870c78008c82edbe0960fe768bd\"},\"image\":{\"@id\":\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/prodskill.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/image-51.png\",\"keywords\":[\"python\",\"BinPacking\",\"\uc5d1\uc140VBA\",\"\uc791\uc5c5\ubc30\ubd84\ucd5c\uc801\ud654\"],\"articleSection\":[\"1\ucc28\uc6d0 Bin Packing \ub3c4\uad6c\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/\",\"url\":\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/\",\"name\":\"1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_4.\ubcc4\ucca8\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/prodskill.com\\\/ko\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/prodskill.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/image-51.png\",\"datePublished\":\"2022-09-06T09:29:28+00:00\",\"dateModified\":\"2022-11-15T03:00:11+00:00\",\"description\":\"\uc5d1\uc140 VBA \uae30\ubc18 \ub3c4\uad6c\uc758 \uac01 Sheet, Module, Class\uc758 \uc8fc\uc694 \uad6c\ud604 \ub0b4\uc6a9 \ub0b4\uc6a9\uacfc \uc18c\uc2a4 \ucf54\ub4dc\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf8\ub2e4. \uc54c\uace0\ub9ac\uc998\uc758 \ub300\ubd80\ubd84\uc740 CPacker \ud074\ub798\uc2a4\uc5d0 \uad6c\ud604\ub418\uc5b4 \uc788\uc73c\ubbc0\ub85c \uc774 \ud074\ub798\uc2a4\ub97c \uba3c\uc800 \uc0b4\ud3b4\ubcf4\uae30 \ubc14\ub780\ub2e4.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/#primaryimage\",\"url\":\"https:\\\/\\\/prodskill.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/image-51.png\",\"contentUrl\":\"https:\\\/\\\/prodskill.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/image-51.png\",\"width\":912,\"height\":623},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/prodskill.com\\\/job-scheduling-using-1d-bin-packing-algorithm-6\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/prodskill.com\\\/ko\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_4.\ubcc4\ucca8\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/prodskill.com\\\/ko\\\/#website\",\"url\":\"https:\\\/\\\/prodskill.com\\\/ko\\\/\",\"name\":\"\uc0dd\uc0b0\uc131 Skill\",\"description\":\"Meta Thinking, Meta Working\",\"publisher\":{\"@id\":\"https:\\\/\\\/prodskill.com\\\/ko\\\/#\\\/schema\\\/person\\\/bbad0870c78008c82edbe0960fe768bd\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/prodskill.com\\\/ko\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/prodskill.com\\\/ko\\\/#\\\/schema\\\/person\\\/bbad0870c78008c82edbe0960fe768bd\",\"name\":\"Zerom\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/prodskill.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/productivity_clockgear.png\",\"url\":\"https:\\\/\\\/prodskill.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/productivity_clockgear.png\",\"contentUrl\":\"https:\\\/\\\/prodskill.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/productivity_clockgear.png\",\"width\":512,\"height\":512,\"caption\":\"Zerom\"},\"logo\":{\"@id\":\"https:\\\/\\\/prodskill.com\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/productivity_clockgear.png\"},\"url\":\"https:\\\/\\\/prodskill.com\\\/en\\\/author\\\/proda\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Optimization of work distribution using one-dimensional bin packing algorithm_4.Attachment","description":"This section examines the key implementation details and source code for each sheet, module, and class in the Excel VBA-based tool. Most of the algorithms are implemented in the CPacker class, so we recommend examining this class first.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/","og_locale":"en_US","og_type":"article","og_title":"1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_4.\ubcc4\ucca8","og_description":"\uc5d1\uc140 VBA \uae30\ubc18 \ub3c4\uad6c\uc758 \uac01 Sheet, Module, Class\uc758 \uc8fc\uc694 \uad6c\ud604 \ub0b4\uc6a9 \ub0b4\uc6a9\uacfc \uc18c\uc2a4 \ucf54\ub4dc\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf8\ub2e4. \uc54c\uace0\ub9ac\uc998\uc758 \ub300\ubd80\ubd84\uc740 CPacker \ud074\ub798\uc2a4\uc5d0 \uad6c\ud604\ub418\uc5b4 \uc788\uc73c\ubbc0\ub85c \uc774 \ud074\ub798\uc2a4\ub97c \uba3c\uc800 \uc0b4\ud3b4\ubcf4\uae30 \ubc14\ub780\ub2e4.","og_url":"https:\/\/prodskill.com\/en\/job-scheduling-using-1d-bin-packing-algorithm-6\/","og_site_name":"\uc0dd\uc0b0\uc131 Skill","article_published_time":"2022-09-06T09:29:28+00:00","article_modified_time":"2022-11-15T03:00:11+00:00","og_image":[{"width":912,"height":623,"url":"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/image-51.png","type":"image\/png"}],"author":"Zerom","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Zerom","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/#article","isPartOf":{"@id":"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/"},"author":{"name":"Zerom","@id":"https:\/\/prodskill.com\/ko\/#\/schema\/person\/bbad0870c78008c82edbe0960fe768bd"},"headline":"1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_4.\ubcc4\ucca8","datePublished":"2022-09-06T09:29:28+00:00","dateModified":"2022-11-15T03:00:11+00:00","mainEntityOfPage":{"@id":"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/"},"wordCount":236,"commentCount":0,"publisher":{"@id":"https:\/\/prodskill.com\/ko\/#\/schema\/person\/bbad0870c78008c82edbe0960fe768bd"},"image":{"@id":"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/#primaryimage"},"thumbnailUrl":"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/image-51.png","keywords":["python","BinPacking","\uc5d1\uc140VBA","\uc791\uc5c5\ubc30\ubd84\ucd5c\uc801\ud654"],"articleSection":["1\ucc28\uc6d0 Bin Packing \ub3c4\uad6c"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/","url":"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/","name":"Optimization of work distribution using one-dimensional bin packing algorithm_4.Attachment","isPartOf":{"@id":"https:\/\/prodskill.com\/ko\/#website"},"primaryImageOfPage":{"@id":"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/#primaryimage"},"image":{"@id":"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/#primaryimage"},"thumbnailUrl":"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/image-51.png","datePublished":"2022-09-06T09:29:28+00:00","dateModified":"2022-11-15T03:00:11+00:00","description":"This section examines the key implementation details and source code for each sheet, module, and class in the Excel VBA-based tool. Most of the algorithms are implemented in the CPacker class, so we recommend examining this class first.","breadcrumb":{"@id":"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/#primaryimage","url":"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/image-51.png","contentUrl":"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/image-51.png","width":912,"height":623},{"@type":"BreadcrumbList","@id":"https:\/\/prodskill.com\/job-scheduling-using-1d-bin-packing-algorithm-6\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/prodskill.com\/ko\/"},{"@type":"ListItem","position":2,"name":"1\ucc28\uc6d0 Bin Packing \uc54c\uace0\ub9ac\uc998\uc744 \ud65c\uc6a9\ud55c \uc791\uc5c5 \ubc30\ubd84 \ucd5c\uc801\ud654_4.\ubcc4\ucca8"}]},{"@type":"WebSite","@id":"https:\/\/prodskill.com\/ko\/#website","url":"https:\/\/prodskill.com\/ko\/","name":"Productivity Skills","description":"Meta Thinking, Meta Working","publisher":{"@id":"https:\/\/prodskill.com\/ko\/#\/schema\/person\/bbad0870c78008c82edbe0960fe768bd"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/prodskill.com\/ko\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/prodskill.com\/ko\/#\/schema\/person\/bbad0870c78008c82edbe0960fe768bd","name":"Zerom","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/productivity_clockgear.png","url":"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/productivity_clockgear.png","contentUrl":"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/productivity_clockgear.png","width":512,"height":512,"caption":"Zerom"},"logo":{"@id":"https:\/\/prodskill.com\/wp-content\/uploads\/2022\/09\/productivity_clockgear.png"},"url":"https:\/\/prodskill.com\/en\/author\/proda\/"}]}},"_links":{"self":[{"href":"https:\/\/prodskill.com\/en\/wp-json\/wp\/v2\/posts\/11152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prodskill.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prodskill.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prodskill.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prodskill.com\/en\/wp-json\/wp\/v2\/comments?post=11152"}],"version-history":[{"count":0,"href":"https:\/\/prodskill.com\/en\/wp-json\/wp\/v2\/posts\/11152\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prodskill.com\/en\/wp-json\/wp\/v2\/media\/11156"}],"wp:attachment":[{"href":"https:\/\/prodskill.com\/en\/wp-json\/wp\/v2\/media?parent=11152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prodskill.com\/en\/wp-json\/wp\/v2\/categories?post=11152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prodskill.com\/en\/wp-json\/wp\/v2\/tags?post=11152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}